使用表作為元方法

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