module - 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") 会像我预期的那样工作吗?

抱歉,如果这不是很清楚不得不匆忙写下,谢谢 :)

最佳答案

你实际上在这里问了两个问题:

首先,“这种在模块上加载大量文件的方式可以吗?”

答案是 - 。将该文件称为 mymodule/init.lua 是一种不成文的标准。大多数人的 ?/init.lua 包含在他们的 path 中,所以你可以只写 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 上可用吗?”。

答案也是,只要定义变量的文件在使用变量的文件。

https://stackoverflow.com/questions/3849642/

相关文章:

ajax - setInterval 不适用于 ajax 调用

opengl - 如何让鼠标光标在 opengl/glut 中消失?

variables - Lua:为什么改变一个变量的值也会改变另一个变量的值?

vhdl - VHDL 中的通用移位算法

gcc - __builtin_expect 来自 GCC 的概率

c++11 - 无法创建 Direct2D DXGI 表面

image - 人体的宽度和高度

ruby-on-rails - Ruby on Rails 究竟是什么?

r - 为什么 nlogn 很难反转?

iphone - 滚动时 UITableView 未正确更新