我在其他代码中看到了这一点,如果我理解正确的话,应该这样使用:
t1 = {}
t1.__index = t2 --1
function t1:new()
local new = {}
setmetatable(new, {__index = t1}) --2
new.something = 0
return new
end
但是他们真正做的是什么,为什么他们有不同的写作方式?
发布于 2018-05-15 21:06:58
它们的编写方式不同,因为它们做的事情不同。
t1 = {}
t2 = {a = 20}
meta = {__index = t2}
setmetatable(t1, meta)
print(t1.a) -- prints 20
注意这里有3个表:meta
,元表,t2
,它存储了键a
和t1
,我们想要设置它来查找t2
中缺少的键。
元表仅用于控制t1
的行为,但是,为了使用较少的表,人们通常使用备用表(t2
)作为元表(meta
),因此它类似于
t1 = {}
t2_and_meta = {a = 20}
t2_and_meta.__index = t2_and_meta
setmetatable(t1, t2_and_meta)
print(t1.a) -- prints 20
https://stackoverflow.com/questions/50350533
复制相似问题