包括文件,覆盖变量

Mar*_*ars 3 lua

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

file1.lua

val = 1
require "file2"
Run Code Online (Sandbox Code Playgroud)

file2.lua

val = 2
Run Code Online (Sandbox Code Playgroud)

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

function include(file)
    dofile("path/since_dofile_doesnt_seem_to_use/package/path" .. file .. ".lua")
end
Run Code Online (Sandbox Code Playgroud)

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

更新:

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

Set*_*gie 6

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

您可以通过设置解决这个问题package.loaded[packagename] = nil后,require荷兰国际集团包.这样,当lua检查表中是否存在包名时,它将无法找到它,因此您可以根据需要多次使用它.