Lua和继承:无法在函数中访问self对象。

我是 Lua 的初学者,我正在尝试编写继承。

我已经完成了来自这里的示例,该示例可以正常工作: http://lua-users.org/wiki/ObjectOrientationTutorial

因此,我尝试保持教程语法来完成我的类,但我无法访问一个派生类函数。

这是我的基类代码:

Controller = {page_title = "", view = "index"}
Controller.__index = Controller

setmetatable(Controller, {
__call = function (cls, ...)
  local self = setmetatable({}, cls)
  self:new(...)
  return self
end,
})

function Controller:new()
end

-- 执行传入的函数 
function Controller:execute(functionName)
    if(self[functionName] ~= nil) then
        self[functionName]()
    else
        ngx.say("Cette page n'existe pas")
    end
end

派生类的代码:

require("controllers/Controller")

ControllerUser = {page_title = ""}
ControllerUser.__index = ControllerUser

setmetatable(ControllerUser, {
  __index = Controller, -- 这是继承起作用的地方
  __call = function (cls, ...)
    local self = setmetatable({}, cls)
    self:new(...)
    return self
  end,
})

function ControllerUser:new()
    Controller:new()
    ngx.say('created!') --Displayed one time
    return self
end

function ControllerUser:creerCompte()
    ngx.say("Executed!") --Displays correctly the message
    ngx.say(self.page_title) -- 错误:尝试索引本地 'self'(值为 nil)

end

return ControllerUser

最后是主要函数:

local controller = require("controllers/ControllerUsers"):new() --试过不使用 new 但并没有改变什么

-- 调用 "creerCompte" 函数的 ControllerUsers 类(继承自 Controller)
controller:execute("creerCompte")

提前感谢任何帮助

点赞
用户2604672
用户2604672

尝试用下面代码替换

function Controller:execute(functionName)
    if(self[functionName] ~= nil) then
        self[functionName](self)
    else
        ngx.say("Cette page n'existe pas")
    end
end

说明:这段 Lua 代码将自身作为参数传递给 self[functionName] 方法,以便更好地使用控制器方法中的实例变量。

2014-09-26 19:44:34