gpt4 book ai didi

c - Lua: "Hide"函数

转载 作者:行者123 更新时间:2023-12-01 04:23:13 24 4
gpt4 key购买 nike

我想从 lua 调用 c 函数来更改 C 中定义的变量,但我不希望 lua“用户”意识到它们是函数。

例如,考虑一个整数和一个在 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 函数。

谢谢。

最佳答案

当你设置

L_level = 2

你真的索引了全局表 _G用 key L_level并将其设置为 2 .你可以做的是为 _G 设置一个元表并设置函数 __newindex到一个函数,该函数检查 key 是否为 L_levelL_map并以不同的方式处理这些情况。

此函数可以直接是 C 函数或 Lua 函数,它检查键并在名称与您跟踪的名称之一匹配时调用 c 函数,例如
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_setleveldo_setmap在这种情况下是全局 c 函数。当然,您也可以完全用 C 完成所有这些工作。

关于c - Lua: "Hide"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60269150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com