在Lua模块中声明一个类,然后实例化它

时间:2014-05-23 15:43:37

标签: class oop lua

我有一个名为“MyClass.lua”的模块它包含:

local _S = {}

function _S:new(o)
    o = o or {}
    setmetatable(o, self)
    self.__index = self
    return o
end

return _S

在我的主脚本中,我指的是这样的模块:

local c = require "MyClass"
local t = c.new()

这会导致错误。它抱怨setmetatable

<snip>\MyClass.lua:6: bad argument #2 to 'setmetatable' (nil or table expected)

我认为我对setmetatable的作用,self的范围以及__index的作用感到困惑。

1 个答案:

答案 0 :(得分:3)

self参数仅在使用OOP样式时隐式。您还需要像这样调用它:

local t = c:new()
--         ^