在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模块?
答案 0 :(得分:2)
我对Lua模块并不是特别熟悉,但在我看来,正确的解决方案是将方法重新定义为function connect(self)
,然后从{{port
和domain
之后访问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()
如果我只是在没有模块的情况下设置常规表继承,那我肯定会这样做。