如何在Lua脚本之间共享全局变量

Zac*_*Lee 5 lua

我想知道如何在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

有可能实现我想要的吗?(我希望有一个例子)

cod*_*dev 5

您目前正在做的事情如下:

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 来获得所需的结果。