我想从lua调用c函数来更改C中定义的变量,但是我不希望lua“ user”意识到它们是函数。
例如,考虑一个整数和一个在c中创建的数组:
int c_level = 0;
int c_map[4] = {0,0,0,0};
现在程序创建一个Lua状态并运行它:
set_level(2) --c_level = 2
set_tile(1,23) --c_map[0] = 23
我希望它们在lua脚本中看起来像这样:
L_level = 2
L_map[1] = 23
因此, L_level 和 L_map 将是用C定义的函数。
L_level 的参数为“ 2”。
L_map 的参数为“ 1”和“ 23”。
有可能吗?
我可以使用getglobal来获取lua变量,但是我想知道是否可以创建一些类似于我所展示的lua函数。
谢谢。
答案 0 :(得分:1)
设置时
L_level = 2
您确实使用键_G
为全局表L_level
编制了索引,并将其设置为2
。您可以做的是为_G
设置 meta 表,并将函数__newindex
设置为一个函数,该函数检查键是L_level
还是{ {1}},并以不同的方式处理这些情况。
此函数可以直接是C函数或Lua函数,如果名称与您跟踪的名称之一匹配,则该函数会检查键并调用c函数,例如
L_map
setmetatable(_G, {
__newindex = function (_, k, v)
if (k == "L_level") then do_setlevel(v)
elseif (k == "L_map") then do_setmap(v)
else rawset(_G, k, v)
endif
end
})
和do_setlevel
在这种情况下是全局c函数。当然,您也可以完全用C来完成所有这些工作。