包括文件,覆盖变量

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

file1.lua

` val = 1 要求“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不会再次加载它以更改值。 解决的。

原文链接 https://stackoverflow.com/questions/9286102

点赞
stackoverflow用户1208078
stackoverflow用户1208078

在 file2.lua 文件中:

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

输出应该是:

1
2
2012-02-15 00:14:16
stackoverflow用户726361
stackoverflow用户726361

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

您可以通过在 require 包后设置 package.loaded[packagename] = nil 来解决这个问题。这样,当 Lua 检查包名称是否存在于表中时,将找不到它,因此您可以随意多次 require

2012-02-15 13:30:02