包括文件,覆盖变量

时间:2012-02-15 00:04:28

标签: lua

我正在尝试覆盖我的第一个.lua文件中的变量,在我的代码末尾要求第二个。

file1.lua

val = 1
require "file2"

file2.lua

val = 2

不幸的是,这似乎不起作用,因为val在此之后仍然是1。我提出的解决方案,允许这些文件的潜在未来用户包含文件,是一个新功能,我现在在初始化Lua时插入:

function include(file)
    dofile("path/since_dofile_doesnt_seem_to_use/package/path" .. file .. ".lua")
end

这完全符合预期,但由于我还是Lua的新手,我想知道,如果有更好的解决方案。也许已经存在了一些东西?

更新

我的问题是我在多个文件上多次意外地需要file2,并且Lua不会再次加载它来更改值。解决。

2 个答案:

答案 0 :(得分:6)

Lua在名为require的表格中跟踪代码中package.loaded d的所有文件。每次文件require d时,都会检查该表,如果表中已存在模块名,则不会加载该表。如果表中不存在,则加载模块并将名称添加到表中。这样你可以多次require一个模块,但它只会在第一次运行。

您可以在package.loaded[packagename] = nil包裹之后设置require来解决此问题。这样,当lua检查表中是否存在包名时,它将无法找到它,因此您可以根据需要多次使用它。

答案 1 :(得分:0)

在file2.lua

print(val)
_G.val = 2
print(val)

输出应该是

1

2