lua_settop()のドキュメントは非常に明確だと思いました。
void lua_settop(lua_State * L、int index);
受け入れ可能なインデックスまたは0を受け入れ、スタックトップをこのインデックスに設定します。新しいトップが古いトップよりも大きい場合、新しい要素はnilで埋められます。インデックスが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()呼び出しさえあるのですか?