Я работаю над созданием набора общих библиотек для использования со встроенными экземплярами интерпретатора Lua (целевая аудитория - пользователи определенного продукта).Предположим, у меня нет доступа к изменению возможностей исполняемых файлов Lua, и у меня есть только базовые стандартные библиотеки Lua (математика, строка, ..., исключение не io).
Что такое идиоматический способ обработкиошибки времени выполнения в чистых библиотеках Lua?
Я подумал о возврате nil
, но это не сигнализирует о том, что пошло не так, особенно если ошибка произошла где-то глубоко вложенным.Моя следующая мысль - вернуть два значения, nil
и код ошибки или описание.Я также рассмотрел набор глобальных функций, похожих на GetLastError API Windows (и соответствующий SetError).
Что вы используете?Что вы видите как различные плюсы / минусы различных подходов?Стоит ли рассматривать что-то более радикальное, например, обернуть все в pcall
и преднамеренно индексировать userdata
, чтобы вызвать ошибку?