我目前正在Lua工作一个相当详细的项目,特别是使用LOVE2D。我目前正在使用require'file'
来访问我项目的不同部分,但这似乎非常糟糕。我遇到了使用相同名称覆盖不同文件中的表的问题。必须有一个专业,清洁的方式来做到这一点,但我还没有找到一个。有人可以帮帮我吗?
答案 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也值得一读。