使用表作为元方法

一些 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()