2011-10-29 10 views
1

別のものの中から1つのLuaライブラリを使用する際に問題があります。私はそれを行う最善の方法については分かりません。Lua - 別のライブラリからlibを使用するにはどうすればよいですか?

私はこのように、機能を持つ(非グローバル)テーブルを返すライブラリを持っている

-- foo.lua 
local foo = {} 
function foo:m1(...) ... end 
function foo:m2(...) ... end 
return foo 

このライブラリは、どのようなユーザーに応じて、グローバルまたはローカルの範囲のいずれかに挿入することができますたい:私は今、別のlibを作成しようとしている

-- globally 
foo = require('foo') 
-- or locally 
local foo = require('foo') 

このfooのlibを使用しています/必要とする(のがそれbarを呼びましょう)。このような何か:

-- bar.lua 
local bar={} 
function bar:m3(...) 
    ... 
    foo:m1() 
    ... 
end 

私の悩みはある - 私はbarからfooを「合格」する方法がわかりません。

理想的には私がrequireにパラメータとしてそれを送りたい:

local foo = require('foo') 
local bar = require('bar', foo) 

しかし、私はそれが可能だとは思わない(それはあります?)。私が考えることができ、他のオプションが追加されたinit方法barへ:

local foo = require('foo') 
local bar = require('bar') 
bar:init(foo) 

これは動作しますが、私には非常にきれいに見えません。その第3行を追加するのを忘れて、barを「安全でない」状態にしておくことが可能です。

共通のLuaイディオム/メソッドがありますか?

答えて

6

require 'foo'barモジュールに直接呼び出すだけです。これは完全に合法です。 fooモジュールは1回だけロードされます。 barモジュールから漏れないようにするには、ローカル変数に格納してください。

このイディオムを使用して、1つの大きなモジュールを複数の部分に分割し、1つのモジュールに他のすべてのモジュールが必要な場合もあります。ユーザーはrequireに1つのモジュールのみが必要です。

+0

もちろんです!どのように私はそれについて考えなかった!私は 'bar'から' foo'''を試してみましょう。もし失敗すれば、barの "path"を取得して、試してみてください(path .. '.foo')、そうでなければエラーです。ありがとう! – kikito

関連する問題