【发布时间】:2016-10-08 18:58:22
【问题描述】:
Lua 5.3 参考手册(在这个part,向下滚动)说:
__newindex:索引分配表[key] = value。与索引事件一样,当表不是表或表中不存在键时,会发生此事件。元方法在表中查找。
但是我不明白当表不是表时元方法 __newindex 会发生。这意味着什么?我确实尝试使用nil 重新分配一个本地,但它没有用(是的,我知道重新分配表没有意义,但这将有助于它被垃圾收集)。
local v = {};
setmetatable(v, {
__newindex = function(t,k,v)
print("Aaahhh...!");
end
});
v = nil;
我正在使用这个online compiler 来测试它。
【问题讨论】:
-
除了当前的答案之外,应该注意您也可以为其他值设置元表。
setmetatable可以设置表或用户数据。debug.setmetatable可以设置一个元表,该元表将应用于不同数据类型的每个值。 -
不是表是什么意思:)
-
@warspy 这意味着 Lua 上的每种类型的值都是一个对象?谢谢您的帮助!在您的评论和 smarx 的回答的帮助下,我现在明白了。这应该在答案中真正注明
-
不,不是所有的值都是对象!一点也不。例如,如果您将元表设置为 1,则所有数字都将具有该数据类型。只有表和用户数据是对象。
-
@warspyking 我明白了,这很简单!我编译了你所说的代码......ideone.com/Nu8a1W它就像一个原型......
标签: lua