我正在尝试覆盖我的第一个.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不会再次加载它来更改值。解决。
答案 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