繁体   English   中英

Lua通过C API使用可选的表值

[英]Lua using optional table values with the C API

我正在将表{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()进行测试。

我已经将metatable与userdata一起使用,取得了很好的成功。 但是尽管如此,我真的不知道该怎么做。

无需过于复杂。 如果要在Lua中生成默认值,请使用元表,但是如果可以在C中获取它,则非常简单。 如果在表中找不到该密钥,则lua_getfield会产生nil ,因此您可以将其返回值与LUA_TNIL进行比较,以检查它的返回值是否为nil(如果使用较旧的API, lua_isnil )。 在这种情况下,请使用默认值,或照常使用luaL_checkstring

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM