【问题标题】:Change global vars in Lua from C 'globally'从 C 'globally' 更改 Lua 中的全局变量
【发布时间】:2015-12-11 13:37:33
【问题描述】:

如果从 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”从“Table1”更改为 321而不是“Val”。

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

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

【问题讨论】:

  • 正如您已经注意到的那样,GlobalVar 被复制,因为它是一个数字值(值复制,而不是引用复制)。要更新您的表格条目,您必须手动完成或将您的值存储在用作指针的表格中。

标签: c lua lua-table


【解决方案1】:

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

if GlobalVar == nil then GlobalVar = 123 end

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

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

【讨论】:

  • 所以你的意思是,我调用 'lua_setglobal(..' 和 'luaL_loadfile(..' afterwards ?
猜你喜欢
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
相关资源
最近更新 更多