Lua模块继承

时间:2013-03-15 21:13:24

标签: oop inheritance nginx lua

在Lua中需要有关模块继承的帮助。

我们说我有2个模块:

第一个是#34;父母"它定义了一个名为" port"和方法"连接"使用端口&域字段连接到某些服务。我想在Child模块中定义第二个字段(域),而不是在Parent 1中定义。或至少通过子模块覆盖此字段。

module('Parent', package.seeall)

port = 1234

function connect() 
   ngx.say("connecting to "..domain..":"..port.."\n")

end

请注意" " 未定义变量

现在让我们看看第二个,它是"孩子":

local base = _G

module('Child', package.seeall)

local Parent = base.require('Parent')
base.setmetatable(Child, { __index = Parent })

domain     = '127.0.0.1'

这里是主要的lua代码创建Child实例:

local Child = require "Child"

Child.connect()

问题是 Child 模块中定义的变量对于 Parent 模块中定义的方法是不可见的。我需要更改此行为以让Parent例程代码看到变量在Child模块中定义..这可能吗? 我能否以某种方式将 Child 的命名空间复制到Parent模块?

1 个答案:

答案 0 :(得分:2)

我对Lua模块并不是特别熟悉,但在我看来,正确的解决方案是将方法重新定义为function connect(self),然后从{{portdomain之后访问self 1}},这将是包。

function connect(self)
    ngx.say("connecting to "..self.domain..":"..self.port.."\n")
end
-- this could also be written as function Parent:connect()

...

local Child = require "Child"

Child:connect()

如果我只是在没有模块的情况下设置常规表继承,那我肯定会这样做。