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

时间:2014-09-26 15:08:18

标签: function inheritance lua

我是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

-- Execute the function given in parameter
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, -- this is what makes the inheritance work
  __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) -- Error: attempt to index local 'self' (a nil value)

end

return ControllerUser

最后主要功能:

local controller = require("controllers/ControllerUsers"):new() --tried without new but it doesn't change anything

-- Call the function "creerCompte" of the class ControllerUsers (which inherits from Controller)
controller:execute("creerCompte")

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:2)

尝试替换

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

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