我是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")
提前感谢您提供任何帮助
答案 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