Lua 使用 C API 处理可选的表值

我正在从 Lua 中将一个表 { Value1=100, Value2=200, Value3=300, ...} 传递到 C 中。对于我需要的值,以下代码运作得很好:

// 获取表中的值
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() 来测试它。

我已经使用用户数据的元表取得了良好的结果。但尽管如此,我真的不知道如何去做。

点赞
用户1424244
用户1424244

就不必过度复杂化了

如果要在 Lua 中生成默认值,使用元表就可以了,但如果可以在 C 语言中获取它,那么就非常容易。lua_getfield在表中找不到键时会生成nil,因此可以将其返回值与LUA_TNIL进行比较,以检查它是否返回了nil(如果使用较旧的API则可以使用lua_isnil)。在这种情况下,使用您的默认值,或者像往常一样继续使用luaL_checkstring

2018-09-15 22:58:47