Lua - 模块问题的疑问

假设我想要为一组 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 模块的一部分吗?也就是说,如果在 control.lua 中我有 control = {...},那么它是否被定义为 bgui.control,或者我应该让 control.lua 成为一个模块,例如 module("bgui.control"),那么这将按照我的意图工作吗?

抱歉如果这不是很清楚,写得有点仓促,谢谢 :)

原文链接 https://stackoverflow.com/questions/3849642

点赞
stackoverflow用户312586
stackoverflow用户312586

你实际上在问两个问题:

首先,“使用这种方式在模块中加载大量文件是否可以?”

答案是 - 可以。这种情况下,称该文件为 mymodule/init.lua 已成为一种默契标准。大多数人已将 ?/init.lua 包含在他们的 path 中,因此你可以只写 require('modules/bgui')init.lua 将自动加载。

话虽如此,您可能需要使用临时表和循环来删除一些代码重复:

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

其次,“一个文件中定义的对象是否在 bgui 中可用?”

答案也是可以,只要定义变量的文件在使用变量的文件之前“完成”(使用 dofilerequire)。

2010-10-03 18:14:57