Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Lua脚本之间共享全局变量_Lua - Fatal编程技术网

如何在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`);

我想知道如何在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`);
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调用Lua
require
函数

注意:我不建议让模块通过共享全局变量进行通信,尤其是当加载模块的顺序与这里的情况一样重要时。最好提供方法
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();
两个脚本执行,您应该很好。谢谢您,先生。虽然知道这一点非常有用,但我认为它并不能真正回答我想要解决的问题。如果您能看看我发布的其他问题,我将不胜感激: