我认为 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)));
}
产量:
? 0 -> table
是什么赋予了?
如何检查堆栈是否为空?使用 (lua_gettop(L) == 0)?
如果是这样,为什么还有一个 lua_isnone() 调用?