为什么空堆栈的顶部是lua中的一个表?

Dou*_*oug 0 c lua

我认为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()调用呢?

Nec*_*lis 5

您的问题可以通过以下文档轻松回答lua_gettop:

返回堆栈中顶部元素的索引.因为索引从1开始,所以此结果等于堆栈中元素的数量(因此0表示空堆栈).