【发布时间】:2017-10-14 21:09:19
【问题描述】:
我正在使用 Lua 学习面向对象的编程。我无法理解在实例的 __index 字段中分配表和为实例设置元表之间的功能差异。我查看了官方 Lua 的参考手册,但我没有完全掌握其中的区别。例如,要创建 Account 类的实例,它将 Account 类(self)的 __index 字段设置为自身,然后将实例的元表设置为 Account 类。
function Account:new (o)
o = o or {}
self.__index = self
setmetatable(o, self)
return o
end
这里发生了什么?在这种情况下,为什么 Account 将它自己的索引设置为自己?如果实例 'o' 只是使用 Account 类作为其元表,那么在这种情况下,真正的元表有什么用?为什么 Lua 允许类成为其实例的元表?
据我了解,元表应该是仅由元方法(__newindex、__index、__add 等)组成的表。但是该示例将 __index 作为 Account 类的字段,此时,它不是元表,也没有分配给它的元表,因此如果有意义的话,分配会查找另一个元表。
提前致谢。
【问题讨论】:
标签: lua