2016-06-21 66 views
0

我目前正在使用Lua中的一个相当详细的项目,特别是使用LOVE2D。我目前使用require'file'为了访问我的项目的不同部分,但这似乎是非常糟糕的形式。我遇到了使用相同名称覆盖来自不同文件的表的问题。必须有专业,干净的方式来做到这一点,但我一直没有找到。有人能帮助我吗?从Lua中的单独文件调用函数/变量/表

+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也值得一读。