如何解决为什么第一个示例构造函数在 `self` 上设置了 `__index`?
我刚刚开始研究 Lua,我正在研究 introductory Lua example for "classes"。
Account = {balance = 0}
function Account:new (o)
o = o or {}
setmetatable(o,self)
self.__index = self
return o
end
我不明白为什么构造函数不只是
function Account:new (o)
o = o or {}
setmetatable(o,{__index = self})
return o
end
如果您能帮助我理解这一点,我将不胜感激。
编辑:
@Egor 观察到第二种方法会创建太多元表。好的,我明白了(事实上,这很明显)。但是第一种方法仍然感觉很奇怪(例如,它反复在 __index
上设置 Account
)。也许这样的事情会满足双方的反对意见?
Account = {balance = 0}
Account_meta = {__index = Account}
function Account:new (o)
o = o or {}
setmetatable(o,Account_meta)
return o
end
解决方法
我认为这种方法的唯一原因是将其与 next section 中的继承联系起来。
那里的继承实现使用 SpecialAccount
创建 SpecialAccount = Account:new()
的原型,然后使用 SpecialAccount
创建 instance = SpecialAccount:new()
的新实例。
如果我们希望这种方法完全起作用,那么这两个调用之一必须将 SpecialAccount.__index
设置为 SpecialAccount
。假设我们只想在原型/元表/类上设置 __index
,它必须是第二个。这会花费我们在每个对象创建期间重复一次分配,但我想就示例而言,这并不重要。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。