Lua using optional table values with the C API
我正在将一个表 { Value1=100, Value2=200, Value3=300, ...} 从 Lua 传递到 C。以下内容非常适合我所需的值:
1 2 3 4 5 6 7 8 | // 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() 来测试。
我已经成功地使用了带有 userdata 的元表。但尽管如此,我真的不知道该怎么做。
没有必要把事情复杂化。如果您想在 Lua 中生成默认值,请使用元表,但如果您可以在 C 中获取它,则非常容易。如果在表中找不到键,则