是否有一种测试(或一种神奇的方法)来找出您在脚本中遇到的表在此脚本或其他所需模块中其他地方是否有一个元表?无需精查整个代码。
答案 0 :(得分:4)
如果您想确定:
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...
)
(感谢Egor Skriptunoff指出这一点!)
答案 1 :(得分:2)
如果需要有关元表内容的信息,则需要阅读文档或源代码。
可以通过定义__metatable
来锁定表的元表,此时getmetatable
几乎可以是程序员想要返回的任何值,不能将其设置为nil
。
__ metatable-隐藏该元表。调用“ getmetatable(myTable)”时,如果myTable的元表具有__metatable键,则将返回该键的值,而不是实际的元表。
没有保证方法可以告诉您给定表的元表的内容。
已编辑:如Nicol Bolas所述,当设置了元表时,将nil
覆盖为不可能的值