Lua:“隐藏”功能

时间:2020-02-17 19:23:49

标签: c function api lua

我想从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函数。

谢谢。

1 个答案:

答案 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来完成所有这些工作。