首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >"t1.__index = t2“和"setmetatable(t1,{__index = t2})”有什么区别?

"t1.__index = t2“和"setmetatable(t1,{__index = t2})”有什么区别?
EN

Stack Overflow用户
提问于 2018-05-15 20:43:20
回答 1查看 37关注 0票数 1

我在其他代码中看到了这一点,如果我理解正确的话,应该这样使用:

代码语言:javascript
复制
t1 = {}
t1.__index = t2 --1

function t1:new()
    local new = {}
    setmetatable(new, {__index = t1}) --2

    new.something = 0

    return new
end

但是他们真正做的是什么,为什么他们有不同的写作方式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-15 21:06:58

它们的编写方式不同,因为它们做的事情不同。

代码语言:javascript
复制
t1 = {}
t2 = {a = 20}
meta = {__index = t2}
setmetatable(t1, meta)
print(t1.a) -- prints 20

注意这里有3个表:meta,元表,t2,它存储了键at1,我们想要设置它来查找t2中缺少的键。

元表仅用于控制t1的行为,但是,为了使用较少的表,人们通常使用备用表(t2)作为元表(meta),因此它类似于

代码语言:javascript
复制
t1 = {}
t2_and_meta = {a = 20}
t2_and_meta.__index = t2_and_meta
setmetatable(t1, t2_and_meta)
print(t1.a) -- prints 20
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50350533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档