假设我想创建一个模块来说明一组GUI控件,我将如何创建一个可以加载所有GUI脚本的模块,我应该将这些脚本作为模块本身?我在考虑建立一个这样的系统:
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模块的一部分吗?
Aka如果在control.lua我有control = {...}
它会被定义为bgui.control还是我应该将control.lua作为一个模块本身,像module("bgui.control")
那样可以按照我的意图工作?
对不起,如果不是很清楚必须匆匆写下来,谢谢:)
答案 0 :(得分: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上可用的一个文件上定义了对象吗?”。答案也是是,只要在使用变量的文件之前定义变量的文件是“完成”(使用dofile
或require
)。