如何解决然后使__index和__newindex如何检测table.index
我还是一个使用元表的新手,这让我感到困惑
当我在元表中使用__index
和__newindex
之类的元方法时,仅当我按如下方式调用表的元素时才调用它们:
print(table[index]) -- this call the __index
table[index] = value -- this call the __newindex
但是当我按如下方式调用表的元素时,不会调用这两个元方法:
print(table.index) -- this does NOT call __index
table.index = value -- this does NOT call __newindex
我的问题是,有什么方法可以使table.index
也称为这两种元方法?还是只有table[index]
有效?
解决方法
是的,__index可以在两个括号mytable["index"]
和点运算符mytable.index
mytable = setmetatable({},{ __index = function(t,k)
if k == "index" then
return "works fine"
end
return rawget(t,k)
end })
print(mytable["index"])
print(mytable.index)
您可以使用rawget和rawset规避预设的元表方法
话虽如此,如果您不熟悉Lua,我建议您寻找不使用元表的简单解决方案。
, __idnex
和__newindex
元方法仅在表中所涉及的索引中没有元素时才使用。如果已经有一个元素,则索引将仅返回该元素,对其进行设置只会覆盖现有元素。
如果要完全控制表中的所有索引,则必须将其100%保留为空并将其所有值保存在另一个表中,然后使用元方法进行访问。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。