我正在将一个表 { 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/