通过 require 在不同 Lua 状态之间共享全局变量

Zac*_*Lee 2 c++ lua

我试图找到一种方法来test.lua在不同的 Lua 状态之间共享特定 Lua 脚本(在示例中)的全局变量。

这是我的简单示例代码:

test.lua

num = 2
Run Code Online (Sandbox Code Playgroud)

main.cpp

#include <iostream>
#include <lua.hpp>
int main() 
{    
    lua_State *L1 = luaL_newstate(); //script A
    luaL_openlibs(L1);
    lua_settop(L1, 0);
    luaL_dostring(L1, "require('test') num = 5");

    lua_State *L2 = luaL_newstate(); //script B
    luaL_openlibs(L2);
    lua_settop(L2, 0);
    luaL_dostring(L2, "require('test') print(num)");

    lua_close(L1);
    lua_close(L2);
}
Run Code Online (Sandbox Code Playgroud)

我希望得到,5但我得到了2

不能在不同的lua_State*through之间共享全局变量require吗?

添加 :

如果不可能,那么在 C++ 中打开test.luausingluaL_loadfile然后创建 getter/setter 方法以num在脚本A和之间共享变量是个好主意B吗?

例如像这样,

脚本A:

script = my.Script("test")
script:setVar("num", 5)
Run Code Online (Sandbox Code Playgroud)

脚本B:

script = my.Script("test")
print(script:getVar("num"))
Run Code Online (Sandbox Code Playgroud)

我想知道您如何看待这种设计作为require.

Nic*_*las 5

两个不同的lua_States 是完全独立的。一个人不能直接影响发生在另一个人身上的任何事情。您可以将一些 C 代码公开给一个允许它修改另一个,或者他们都可以访问一些允许他们共享数据的外部资源(例如文件)。

但在这样的事情之外,不,他们不能互动。

对此的首选方法是不要让它们分开lua_States。