有没有测试(或神奇的方法)来找出您在脚本中遇到的表是否在此脚本中的其他位置或所需的其他模块中具有元表?这是在不搜索整个代码的情况下实现的。
发布于 2018-12-20 22:35:39
如果您想要确定:
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...)。
(感谢埃戈尔·斯克里普图诺夫指出这一点!)
发布于 2018-12-21 00:32:22
如果需要有关元表内容的信息,则需要阅读文档或源代码。
表的元表可以通过定义__metatable来锁定,在这一点上getmetatable几乎可以是程序员想要返回的任何值,它不能设置为nil。
Lua-Users Metatable Events
__metatable -隐藏元表。当调用"getmetatable( myTable )“时,如果myTable的元表有一个__metatable键,则返回该键的值,而不是实际的元表。
没有保证的方法可以告诉你一个给定表的元表的内容。
编辑:如Nicol Bolas所述,在设置元表时,将nil作为一个不可能的值进行覆盖
https://stackoverflow.com/questions/53860476
复制相似问题