2012-06-26 3 views
1

Я включил интерпретатор Lua в свою программу на C, и у меня есть простой вопрос, на который я не могу найти однозначного ответа.Как определить, была ли выбрана ошибка Lua?

Пусть у меня есть функция C, что я разоблачить в Lua следующим образом:

static int calculate_value(lua_State *L) 
{ 
    double x = luaL_checknumber(L, 1); 
    return 0; 
} 

Как я могу определить (в C, после этой функции называлась), что Lua бросил ошибку при вызове luaL_checknumber? Есть ли сообщение об ошибке, просто сидящее в верхней части стека? Есть ли еще какой-то индикатор, что ошибка была выброшена?

ответ

2

В общем, вы этого не делаете. Функции Lua, которые используют ошибки, используют setjmp/longjmp (или исключения, если они скомпилированы как C++), чтобы вернуть управление вызывающей среде выполнения Lua. Ошибка будет представлена ​​функции Lua, которая называется вашей функцией calculate_value.

Если вы хотите обрабатывать ошибки параметров по-разному, вы не можете использовать функции Lua's luaL_check*.

1

Если эта функция вызывается через Lua, вы можете использовать pall. Или используйте lua_pcall перед запуском сценария Lua, который вызвал эту функцию.