Ruby предлагает две возможности программно вызывать исключение: raise
и fail
, оба являются методами Kernel
. Согласно документам, они абсолютно эквивалентны.
Из привычки я использовал только raise
до сих пор. Теперь я нашел несколько рекомендаций (например, здесь), чтобы использовать raise
для исключений, которые нужно поймать, и fail
для серьезных ошибок, которые не предназначены для обработки.
Но действительно ли это имеет смысл? Когда вы пишете класс или модуль и вызываете проблему глубоко внутри, которую вы сигнализируете fail
, ваши коллеги по программированию, которые просматривают код, могут с радостью понять ваши намерения, но человек, который использует мой код, скорее всего, не будет выглядеть в моем коде и не имеет способа узнать, было ли исключение вызвано raise
или fail
. Следовательно, мое осторожное использование raise
или fail
может влиять на его решение, должна ли она или не должна его обрабатывать.
Может ли кто-нибудь увидеть недостатки в моих аргументах? Или есть другие критерии, которые могли бы мне хотеть использовать fail
вместо raise
?