使用表作为元方法
一些 metamethods 不一定是函数。最重要的例子是 __index
元方法。它也可以是一个表,然后用作查找。这在 lua 中创建类时非常常用。这里,一个表(通常是 metatable 本身)用于保存类的所有操作(方法):
local meta = {}
-- set the __index method to the metatable.
-- Note that this can't be done in the constructor!
meta.__index = meta
function create_new(name)
local self = { name = name }
setmetatable(self, meta)
return self
end
-- define a print function, which is stored in the metatable
function meta.print(self)
print(self.name)
end
local obj = create_new("Hello from object")
obj:print()