首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到表的方法论

如何找到表的方法论
EN

Stack Overflow用户
提问于 2018-12-20 07:15:41
回答 2查看 99关注 0票数 3

有没有测试(或神奇的方法)来找出您在脚本中遇到的表是否在此脚本中的其他位置或所需的其他模块中具有元表?这是在不搜索整个代码的情况下实现的。

EN

回答 2

Stack Overflow用户

发布于 2018-12-20 22:35:39

如果您想要确定:

代码语言:javascript
复制
if getmetatable(some_table) ~= nil then
  print "It has a metatable"
else
  print "It doesn't have a metatable"
end

这会检测一个元表,即使它已经通过设置__metatable = false“隐藏”了。如果你想尊重这一点,并认为一个“隐藏的”元表根本不是元表,你还必须检查false (或者直接写if getmetatable(some_table) then...)。

(感谢埃戈尔·斯克里普图诺夫指出这一点!)

票数 4
EN

Stack Overflow用户

发布于 2018-12-21 00:32:22

如果需要有关元表内容的信息,则需要阅读文档或源代码。

表的元表可以通过定义__metatable来锁定,在这一点上getmetatable几乎可以是程序员想要返回的任何值,它不能设置为nil

Lua-Users Metatable Events

__metatable -隐藏元表。当调用"getmetatable( myTable )“时,如果myTable的元表有一个__metatable键,则返回该键的值,而不是实际的元表。

没有保证的方法可以告诉你一个给定表的元表的内容。

编辑:如Nicol Bolas所述,在设置元表时,将nil作为一个不可能的值进行覆盖

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53860476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档