【发布时间】:2019-02-20 03:57:16
【问题描述】:
我正在将表 { 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() 来测试。
我已经成功地使用了带有 userdata 的元表。但尽管如此,我真的不知道该怎么做。
【问题讨论】:
-
lua_getfield会抛出错误吗? -
获取tour、阅读How to Ask和minimal reproducible example。几乎完美的问题陈述,除了您需要实际提出问题。
-
不,但是 luaL_checkstring() 会抛出一个错误。 5.2 版 lua_getfield() 是一个 void 函数。这在 5.3 中发生了变化,它现在返回类型,如果在表中找不到键,则包括 nil/0。我正在使用 5.3 库,但指的是 5.2 参考手册。