从 C 'globally' 更改 Lua 中的全局变量

Change global vars in Lua from C 'globally'

如果从 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 ,但不会将 "Val" 从 "Table1" 更改为 321

加载 .lua 文件时,GlobalVar 的 initial 值似乎被 copied 到 Table1第一次。

有没有办法更新整个 lua 文件?

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

if GlobalVar == nil then GlobalVar = 123 end

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

这使您有机会使用 lua_setglobal 从 C 建立全局优先,或者接受默认值。