我想知道如何在Lua脚本之间共享全局变量。
我尝试自己使用它来执行此操作require,但它没有按我的预期工作。
这是我的简单示例代码。
在test.lua
num = 2
Run Code Online (Sandbox Code Playgroud)
在A.lua
require(`test`);
num = 5
Run Code Online (Sandbox Code Playgroud)
在B.lua
require(`test`);
print(num);
Run Code Online (Sandbox Code Playgroud)
如果我A.lua先运行,然后B.lua,我会得到以下结果:
2
Run Code Online (Sandbox Code Playgroud)
但我期望得到,5因为我将变量值修改为2in A.lua。
有可能实现我想要的吗?(我希望有一个例子)
您目前正在做的事情如下:
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)
Run Code Online (Sandbox Code Playgroud)
要打印值 5,您的脚本应如下所示:
-- test.lua
num = 2
-- A.lua
require("test")
num = 5
-- B.lua
require("test")
require("A")
print(num)
Run Code Online (Sandbox Code Playgroud)
这将导致:
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)
Run Code Online (Sandbox Code Playgroud)
编辑:我看到您正在使用 Lua 的 C Api 而不是 Lua 二进制文件来执行脚本。使用编程 API,您应该能够通过使用相同的 lua 状态(通常存储在 C 变量“L”中)执行 A.lua 和 B.lua 来获得所需的结果。