#error-handling #lua
#обработка ошибок #lua
Вопрос:
Я работаю над созданием набора общих библиотек для использования со встроенными экземплярами интерпретатора Lua (целевая аудитория — пользователи определенного продукта). Предположим, у меня нет доступа к изменению возможностей исполняемых файлов Lua, и у меня есть только базовые стандартные библиотеки Lua (math, string, …, исключение — отсутствие ввода-вывода).
Каков идиоматический способ обработки ошибок во время выполнения в библиотеках чистого Lua?
Я рассматривал возможность возврата nil
, но это не сигнализирует о том, что пошло не так, особенно если ошибка произошла где-то глубоко вложенным образом. Моя следующая мысль — вернуть два значения nil
и код ошибки или описание. Я также рассмотрел набор глобальных функций, похожих на GetLastError Windows API (и соответствующий setError).
Что вы используете? В чем вы видите различные плюсы / минусы различных подходов? Должен ли я рассмотреть что-то более радикальное, например, обернуть все в pcall
и намеренно индексировать userdata
, чтобы вызвать ошибку?
Ответ №1:
Ошибки, которые не могут быть восстановлены, должны просто прервать выполнение. Для этого позвоните error
. В противном случае возврат nil
или false
и сообщения об ошибке является стандартным способом Lua.