У меня есть обратный вызов LUA в C / ++, и я пытаюсь использовать lua_gettop()
для обнаружения необязательного первого параметра. Проблема в том, что lua_gettop(L) == 1
всегда верно, даже если я не предоставляю никаких параметров в LUA.
Вот основы моей функции обратного вызова в C / ++:
int LuaFile::l_cpp_my_callback(lua_State *L) {
LuaFilePtr my_this = lua_map_[L];
if ( lua_gettop(L) == 0 ) {
// I never get here
} else if(lua_gettop(L) == 1) {
// Always gets here
} else {
return 1;
}
return 1;
}
Это контекст вызова в коде LUA:
function my_function()
if ... then
if not ... then
if ... then
someOtherCallback(param, param, param)
someOtherCallback(param)
end
if ... then
someOtherCallback(param)
end
end
else
if not ... then
if ... then
someOtherCallback(param, param, param)
someOtherCallback(param)
end
if ... then
someOtherCallback(param)
end
end
var = my_callback()
...
end
end
Я использовал lua_gettype(L, 1)
для отладки, и он возвращает «5», что lua_typename(L, 5)
говорит, что это «таблица». Я предполагаю, что это метатабельная часть стека?
Я понимаю, что 0 не является допустимым индексом в стеке LUA, но тогда как правильно определить необязательные первые параметры?