2010-10-03 75 views
1

假設我想爲一組GUI控件創建一個模塊,我將如何創建一個模塊來加載所有GUI腳本,並且應該將這些腳本作爲模塊本身來使用?我想有這樣一個系統:Lua - 關於模塊的問題

module("bgui", package.seeall) 

dofile("modules/bgui/control.lua") 
dofile("modules/bgui/container.lua") 
dofile("modules/bgui/screenmanager.lua") 
dofile("modules/bgui/form.lua") 
dofile("modules/bgui/button.lua") 
dofile("modules/bgui/textbox.lua") 
dofile("modules/bgui/label.lua") 

會的所有文件運行,那麼有他們設置爲bgui模塊的部分的變量? 又如果在control.lua我有control = {...}它會被定義爲bgui.control還是應該讓control.lua成爲一個模塊本身,類似module("bgui.control")會按照我的意圖工作?

很抱歉,如果這不是很清楚不得不把它寫在匆忙,謝謝:)

回答

7

你實際上問兩個問題在這裏。

第一個問題是「這種在模塊上加載大量文件的方式好嗎?」

答案是 - 。這種文件被稱爲mymodule/init.lua是一種不言而喻的標準。大多數人的路徑中都包含?/ init.lua,因此您只需編寫require('modules/bgui'),init.lua就會自動加載。

這就是說,你可能想通過使用臨時表和循環去除一些重複代碼:

# modules/bgui/init.lua 
local files = { 
    'control', 'container', 'screenmanager', 'form', 'button', 'textbox', 'label' 
} 
for _,file in ipairs(files) do dofile("modules/bgui/" .. file .. ".lua") end 

第二個問題是「都在一個文件中定義的對象可在bgui?」。只要在使用變量的文件之前定義變量的文件是「已完成」(使用dofilerequire),則答案也是

+0

非常感謝,我似乎無法找到關於lua模塊的許多文檔,這有助於噸。 – Blam 2010-10-03 18:30:39