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