时间:2010-04-24 18:32:12

标签: lua

在lua中,这样做是合法的:

table={}
bar
if(table[key]==nil) then
foo

然而,使用C API,我找不到检查指定位置是否有零值的方法。

lua_getglobal(L,"table");
lua_gettable(L,key);

如果表[key]中存储了nil值,则lua_gettable会在调用Lua API(尝试索引nil值)时发出“无保护错误”消息。

在实际按下键之前,有没有办法检查是否存在与该键相关的实际内容?

1 个答案:

答案 0 :(得分:3)

您正在调用lua_gettable错误。它应该是:

lua_getglobal(L, "tableVar");
lua_pushstring(L, key);   //assuming key is a string
lua_gettable(L, -2);

lua_gettable的第二个参数是表的堆栈索引,而不是密钥。

如果密钥是字符串,则可以改为呼叫lua_getfield

lua_getglobal(L, "tableVar");
lua_getfield(L, -1, key);