2

Lua でのモジュールの継承について助けが必要です。

2 つのモジュールがあるとします。

最初のものは「親」です。「ポート」と呼ばれる1つのフィールドと、ポートとドメインフィールドを使用してサービスに接続するメソッド「接続」を定義します。親モジュールではなく、子モジュールで 2 番目のフィールド (ドメイン) を定義したい。または、少なくともこのフィールドを子モジュールでオーバーライドします。

module('Parent', package.seeall)

port = 1234

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

end

" domain " 変数はここでは定義されていないことに注意してください!

では、2 番目のものを見てみましょう。それは「子」です。

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 モジュールにコピーできますか?

4

1 に答える 1

2

私はLuaモジュールに特に精通していませんが、適切な解決策は、メソッドを as として再定義し、パッケージになる にfunction connect(self)アクセスportしてdomainオフにすることです。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 に答える