如何在Lua脚本之间共享全局变量
我想知道如何在Lua脚本之间共享全局变量 我尝试自己使用如何在Lua脚本之间共享全局变量,lua,Lua,我想知道如何在Lua脚本之间共享全局变量 我尝试自己使用require来实现这一点,但它没有像我预期的那样工作 下面是我的简单示例代码 在test.lua中 num = 2 require(`test`); num = 5 require(`test`); print(num); 在A.lua中 num = 2 require(`test`); num = 5 require(`test`); print(num); 在B.lua中 num = 2 require(`test`);
require
来实现这一点,但它没有像我预期的那样工作
下面是我的简单示例代码
在test.lua中
num = 2
require(`test`);
num = 5
require(`test`);
print(num);
在A.lua中
num = 2
require(`test`);
num = 5
require(`test`);
print(num);
在B.lua中
num = 2
require(`test`);
num = 5
require(`test`);
print(num);
如果我先运行A.lua
,然后运行B.lua
,我会得到以下结果:
2
但是我希望得到5
,因为我在A.lua
中将变量值修改为2
有可能实现我想要的吗?(请举个例子)您目前正在做的是:
lua A.lua
> lua process starts
> loading A.lua
> loading test.lua (because it is required by A.lua)
> set global "num" to value 2
> set global "num" to value 5
> lua process exits (A.lua finished)
lua B.lua
> lua process starts
> loading B.lua
> loading test.lua (because it is required by B.lua)
> set global "num" to value 2
> print global "num" (which was set to 2 by test.lua)
> lua process exits (B.lua finished)
要打印值5,脚本应如下所示:
-- test.lua
num = 2
-- A.lua
require("test")
num = 5
-- B.lua
require("test")
require("A")
print(num)
这将导致:
lua B.lua
> lua process starts
> loading B.lua
> loading test.lua (because it is required by B.lua)
> set global "num" to value 2
> loading A.lua (because it is required by B.lua)
> skip loading test.lua (has already been loaded)
> set global "num" to value 5
> print global "num"
> lua process exits (B.lua finished)
编辑:
我看到您使用的是Lua的C Api,而不是Lua二进制文件来执行脚本。使用编程api,您应该能够通过使用相同的lua状态(通常存储在C变量“L”中)执行A.lua和B.lua来获得所需的结果。A.lua
a = 5
b、 卢阿
测试
require('b')
print(a)
您应该得到2,因为require链是从上到下运行的,如果您每次只运行一个文件,lua就会执行这个小小的uniq执行,那么在不同的执行之间没有持久性,因此您需要根据需要进行require,因为没有专门的函数需要C-API中的lua模块。[1]因此,我将自己定位于Lua解释器中的函数,以实现require
,它只是从C调用Luarequire
函数
注意:我不建议让模块通过共享全局变量进行通信,尤其是当加载模块的顺序与这里的情况一样重要时。最好提供方法A.update\u num(old)
和B.update\u num(old)
,它们将num
的旧值作为参数并返回更新后的值
#包括
#包括
int require(lua_State*L,char const*modname){
int const size=lua_gettop(L);
lua_getglobal(L,“要求”);
lua_pushstring(L,modname);
if(lua_pcall(L,1,lua_MULTRET,0)!=0){
嘿,非常感谢你的详细解释。现在我了解了它是如何工作的。你能给我举一个使用编程api的示例吗?你应该能够通过使用相同的lua状态执行A.lua和B.lua来获得所需的结果。
?我自己从来没有使用过编程api,但是如果您通过了相同的lua_State*L=luaL_newstate();
两个脚本执行,您应该很好。谢谢您,先生。虽然知道这一点非常有用,但我认为它并不能真正回答我想要解决的问题。如果您能看看我发布的其他问题,我将不胜感激: