2

在 Lua 中的模块继承方面需要您的帮助。

假设我有 2 个模块:

第一个是“父”它定义了一个名为“端口”的字段和方法“连接”,它使用端口和域字段连接到某些服务。我想在子模块中定义第二个字段(域),而不是在父模块中。或者至少通过子模块覆盖这个字段。

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 代码:

local Child = require "Child"

Child.connect()

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

4

1 回答 1

2

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

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()

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

于 2013-03-15T21:17:45.540 回答