在 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的作用感到困惑。

点赞
用户1009479
用户1009479

当使用 OOP 风格时,self 参数是隐式的。你同样需要像这样调用它:

local t = c:new()
--         ^
2014-05-23 15:57:33