在C中'全局'地更改Lua中的全局变量

如果您从 C 重新设置全局字段,是否可以更改整个 .lua 文件中的全局字段的值?

这可能是 lua 文件:

GlobalVar = 123

Table1 = {ID = 1,   Val = GlobalVar}      -- Val = 123

现在,如果我通过 Lua 的 C-API 调用...

luaL_loadfile(lua, "lua-file" ...

lua_pushstring(lua, "321");
lua_setglobal(lua, "GlobalVar");

这仅将“GlobalVar”更改为 321 而不是“Table1”中的“Val”。

似乎在第一次加载 .lua 文件时,将 GlobalVar 的初始复制 到 Table1。

是否有一种更新整个 lua 文件的方法?

点赞
用户300290
用户300290

正如 @Youka 在评论中所描述的那样,你不能这样做,因为在初始化 Table1 时值已经被复制了。如果你正在做的是设置全局变量,然后运行一次 lua 代码,你可以有条件地在 Lua 文件中初始化全局变量:

if GlobalVar == nil then GlobalVar = 123 end

Table1 = {ID = 1,   Val = GlobalVar}      -- Val = 123

这给你一个机会,可以先从 C 中使用 lua_setglobal 建立全局变量,或者接受默认值。

2015-09-18 14:38:55