什么是元数据的使用没有metamethods?

dee*_*ace 5 lua

我开始在Lua学习基于Prototype的编程.我想知道没有metamethods的metatables的用法是什么.在下面的示例中有一行自我.__ index = self当我删除此行时,somevalue在我的新对象中不可见这是正常的,因为我没有使用metamethod __index.那么metatables的用法是什么 - 仅使用metamethods?对不起琐碎的问题,但这真的很有趣,我知道我可以使用getmetatable来检查某些对象的元表.我需要一个简单的答案:没有metamethods就没有用,或者有(如果是的话那么).

-- 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?
Run Code Online (Sandbox Code Playgroud)

lhf*_*lhf 4

根据定义,元表存储元方法。这并不意味着元表必须存储元方法;而是意味着元表必须存储元方法。有几个库将自身用作元表。

元表是一个普通的 Lua 表。setmetatable仅当您将其作为第二个参数进行调用时,它才成为对象的元表。