跨脚本文件共享lua全局变量?

假设我有一个脚本,如下所示:

my_global = my_cpp_class()
my_global = nil

现在,虽然这可以正确调用 my_cpp_class 的析构函数,但以下代码却无法实现:

my_global = my_cpp_class()
call_script("a.lua") -- a.lua contains "my_global = nil"
-- "call_script" is actually a simplified notation
-- I create script as userdata and then I can
-- set its child scripts that should be reloaded once script is modified

当我将 call_script 简单地替换为 dofile 时就会出现同样的问题。

基本上,我想让特定的脚本文件能够将 "nil" 分配给现有的全局变量,以便旧值变成不可访问状态。

现在我需要这个的原因是实时脚本重新加载 - 每当一个脚本文件被修改时,它会立即被编译并在运行时再次使用 call_script 调用其子脚本,因此应该会导致全局变量被重新分配,从而旧值应该被垃圾收集。

是否有更简单、更可取的方式来实现这样的脚本重新加载?

我应该如何使用locals,或者操作环境?

我使用的是 luabind,如果它有关的话。

点赞
用户2128694
用户2128694

如果在同一个 lua_State 中执行脚本,全局变量实际上被重新赋值了(你可以检查变量在赋值 nil 之前是否可见)。当对象被收集时,C++ 对象的析构函数会被执行,这可能不会立即发生。从 C++ 调用 lua_gc() 或从 Lua 调用 collectgarbage() 可能会有所帮助。

2013-09-29 14:44:19