Lua模块继承

需要您在 Lua 中使用模块继承的帮助。

假设我有 2 个模块:

第一个是"Parent",它定义了一个称为"port"的字段和使用端口和域字段连接到某个服务的方法"connect"。 我希望在 Child 模块中定义第二个字段(domain),而不是在 Parent 模块中定义。或者至少要由 Child 模块覆盖此字段。

`` ` module('Parent', package.seeall)

端口= 1234

连接函数() ngx.say("connecting to "..domain..":"..port.."\n")

end

`` `

请注意,这里未定义变量"domain"!

现在让我们看看第二个模块,它是"Child":

`` ` local base = _G

module('Child', package.seeall)

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

domain= '127.0.0.1' `` `

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

`` ` local Child = require "Child"

Child.connect() `` `

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

点赞
用户582
用户582

我对 Lua 模块不是很熟悉,但是我认为正确的解决方案是重新定义方法为 function connect(self),然后在 self 中访问 portdomain,这将是该包。

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-15 21:17:45