我正在使用 Lua 学习面向对象编程。我无法理解在实例的 __index 字段中分配表和为实例设置元表之间的功能差异。我查阅了官方Lua的参考手册,但我并没有完全理解其中的区别。例如,要创建 Account 类的实例,它将 Account 类 (self) 的 __index 字段设置为其自身,然后将该实例的元表设置为 Account 类。
function Account:new (o)
o = o or {}
self.__index = self
setmetatable(o, self)
return o
end
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?在这种情况下,为什么帐户要为其自身设置自己的索引?在这种情况下,如果实例“o”只是使用 Account 类作为其元表,那么真正的元表有什么用?为什么 Lua 允许类作为其实例的元表?
根据我的理解,元表应该是仅由元方法(__newindex、__index、__add 等)组成的表。但该示例将 __index 作为 Account 类的字段,此时它不是元表,也没有分配给它的元表,因此分配会查找另一个元表(如果有意义的话)。
提前致谢。
lua ×1