Каковы идиоматические способы сигнализации ошибок в чистом Lua?

#error-handling #lua

#обработка ошибок #lua

Вопрос:

Я работаю над созданием набора общих библиотек для использования со встроенными экземплярами интерпретатора Lua (целевая аудитория — пользователи определенного продукта). Предположим, у меня нет доступа к изменению возможностей исполняемых файлов Lua, и у меня есть только базовые стандартные библиотеки Lua (math, string, …, исключение — отсутствие ввода-вывода).

Каков идиоматический способ обработки ошибок во время выполнения в библиотеках чистого Lua?

Я рассматривал возможность возврата nil , но это не сигнализирует о том, что пошло не так, особенно если ошибка произошла где-то глубоко вложенным образом. Моя следующая мысль — вернуть два значения nil и код ошибки или описание. Я также рассмотрел набор глобальных функций, похожих на GetLastError Windows API (и соответствующий setError).

Что вы используете? В чем вы видите различные плюсы / минусы различных подходов? Должен ли я рассмотреть что-то более радикальное, например, обернуть все в pcall и намеренно индексировать userdata , чтобы вызвать ошибку?

Ответ №1:

Ошибки, которые не могут быть восстановлены, должны просто прервать выполнение. Для этого позвоните error . В противном случае возврат nil или false и сообщения об ошибке является стандартным способом Lua.