Каковы идиоматические способы сигнализировать об ошибках в чистом Lua? - PullRequest
3 голосов
/ 04 ноября 2011

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

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

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

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

1 Ответ

7 голосов
/ 04 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...