2016-06-21 54 views
0

我目前正在使用Lua中的一個相當詳細的項目,特別是使用LOVE2D。我目前使用require'file'爲了訪問我的項目的不同部分,但這似乎是非常糟糕的形式。我遇到了使用相同名稱覆蓋來自不同文件的表的問題。必須有專業,乾淨的方式來做到這一點,但我一直沒有找到。有人能幫助我嗎?從Lua中的單獨文件調用函數/變量/表

+0

你有兩個同名的模塊嗎?或者只有兩個同名的全局表?請舉個例子來澄清你的問題。 –

回答

3

使用require正確的做法。

將模塊看作是一個在加載時執行的函數。它的返回值被緩存並在後續的require調用中返回。就像您將使用local變量來限制函數中的範圍一樣,您可以在模塊中執行相同操作。

我猜你的模塊被實現爲全球表:

mymodule = {} 

function mymodule.foo() 
    return 'bar' 
end  

而且你喜歡加載模塊:

require 'mymodule' 

模塊表只是更改爲local變量並返回它:

local mymodule = {} 

function mymodule.foo() 
    return 'bar' 
end 

return mymodule 

然後,您可以使用您選擇的任何名稱加載模塊:

local mymodule = require 'mymodule' 

既然你不創建全局變量,你不必擔心覆蓋其他模塊。

上面使用的示例來自lua-users.org網站上的Module Tutorial。查看更多關於創建模塊的信息。此外,How to write Lua modules in a post-module() world也值得一讀。