我认为lua_settop()的文档很清楚:
void lua_settop(lua_State*L,int index);
接受任何可接受的索引或0,并将堆栈顶部设置为此索引.如果新顶部大于旧顶部,则新元素将填充为nil.如果index为0,则删除所有堆栈元素.
......然而,这段代码:
lua_settop(L, 0);
top = lua_gettop(L);
if (lua_isnoneornil(L, top)) {
printf("Invalid stack (nil)");
}
else {
// WTF?
printf("? %d -> %s", top, lua_typename(L, lua_type(L, top)));
}
Run Code Online (Sandbox Code Playgroud)
产量:
? 0 -> table
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?
如何检查堆栈是否为空?使用(lua_gettop(L)== 0)?
如果是这样,为什么还有一个lua_isnone()调用呢?