c - Lua 通过 C API 使用可选表值

标签 c lua

我正在将一个表 { Value1=100, Value2=200, Value3=300, ...} 从 Lua 传递到 C。以下内容非常适合我所需的值:

// Get the values from the table
lua_getfield(L, 2, "Value1");
lua_getfield(L, 2, "Value2");
lua_getfield(L, 2, "Value3");

const char *value_3 = luaL_checkstring(L, -1);
const char *value_2 = luaL_checkstring(L, -2);
const char *value_1 = luaL_checkstring(L, -3);

但我需要处理表中的可选字段,其中一些字段在编译时可能不知道 - 但在运行时会知道。根据我的所有搜索,我认为我需要使用元表来替换 lua_getfield() 操作的表上的 __index 方法以返回 NIL 而不是在找不到特定键时抛出错误。然后我可以使用 luaL_checktype() 来测试它。

我已经成功地使用了带有用户数据的元表。但尽管如此,我真的不知道该怎么做。

最佳答案

无需将事情复杂化。如果你想在 Lua 中产生默认值,去元表,但如果你能在 C 中得到它,那就很容易了。 lua_getfield 如果在表中找不到该键,则生成 nil,因此您可以将其返回值与 LUA_TNIL 进行比较,以检查是否返回 nil (或者 lua_isnil 如果你使用旧的 API)。在这种情况下,请使用您的默认值,或照常使用 luaL_checkstring

关于c - Lua 通过 C API 使用可选表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52347182/

相关文章:

c++ - Lua RPC 和用户数据

c - 无法从文件中打印字符

c - 如何在 C 中定义/使用 2 维字符串数组(3 维字符?)?

lua - nodemcu string.format 奇数结果

string - 让 Lua 中的数字更容易阅读

lua 元表错误或功能?

c - 尝试将字符串直接传递给函数时会导致段错误

c++ - 在项目中的不同文件之间共享结构

c - 测试用例未在 C 程序中运行

lua - 在 Windows 10 上使用 Torch 运行 Lua(具有有限的管理员权限)