在从Lua调用的C++中,lua_type(L,0)返回9,这未被记录。

我在我的(C++)游戏中使用Lua作为脚本语言。 在一次从lua到c++的调用中,我会检查堆栈顶部的类型:

if(lua_type(L,(0))==LUA_TSTRING)

但有时lua_type(L,(0))返回9。

我似乎找不到任何关于这个的参考资料(返回值应该在-1和8或LUA_TNONE,LUA_TNIL,... LUA_TTHREAD之间)。

发生了什么?

点赞
用户107090
用户107090

栈顶索引为-1,而不是0。

0不能用作访问堆栈的索引:

(请注意,0永远不是可接受的索引。)

见参考手册中的§4.3-有效和可接受的索引

Lua中的C API并不为程序员提供帮助:

正如大多数C库一样,Lua API函数不会检查其参数的有效性或一致性。但是,您可以通过使用定义了宏LUA_USE_APICHECK的方式来改变这种行为。 [§4](http://www.lua.org/manual/5.3/manual.html#4.3)

2015-05-18 11:15:07