2011-10-29 37 views
1

我在使用另一個Lua庫時遇到了麻煩。我不確定最好的辦法。Lua - 如何使用另一個lib?

我有一個返回與功能的(非全局)表的庫,就像這樣:

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

這個庫可以被插入在全局或局部範圍,這取決於用戶什麼希望:

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

我現在正在試圖創建另一個LIB(姑且稱之爲bar)需要/使用此foo庫。事情是這樣的:

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

我的問題是 - 我不知道該怎麼「通」 foobar

理想情況下,我想送它作爲參數傳遞給require

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

但我不認爲這是可能的(是嗎?)。我能想到的另一種選擇是加入init方法bar

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

這工作,但看起來不是很乾淨的給我;可能忘記添加第三行,使bar處於「不安全」狀態。

有沒有一個常見的Lua習語/方法,我失蹤了?

回答

6

只需撥打require 'foo'直接在您bar模塊。這是完全合法的。 foo模塊將只加載一次。爲了不泄漏出bar模塊,請將其存儲在本地變量中。

你也可以使用這個習慣用法將一個大模塊分成幾個部分,並且有一個模塊需要所有其他模塊。用戶將只需要require一個模塊。

+0

但當然!我怎麼沒有想到這個!我會從'bar'嘗試'require'foo'',如果失敗,我會得到酒吧的「路徑」並嘗試ququire(path ..'.foo')',否則會出錯。謝謝! – kikito

相關問題