我开始在Lua学习基于Prototype的编程.我想知道没有metamethods的metatables的用法是什么.在下面的示例中有一行自我.__ index = self当我删除此行时,somevalue在我的新对象中不可见这是正常的,因为
-- Example taken from the official documentation.
Account = { somevalue = 1 }
function Account:new (o)
o = o or {} -- create object if user does not provide one
setmetatable(o, self)
--self.__index = self
return o
end
a = Account:new()
print(a.somevalue) -- nil, so I can't use any features of the metatable till I use some metamethod?
根据定义,metatables存储metamethods.这并不意味着metatable必须只存储metamethods;几个库将自己用作元数据.
metatable是一个普通的Lua表.当您将setmetatable作为第二个参数调用setmetatable时,它只会成为对象的元表.
