Ответ 1
В Ruby fail
является синонимом raise
. Ключевое слово fail
- это метод модуля Kernel
, который входит в класс Object
. Метод fail
вызывает ошибку времени выполнения, как и ключевое слово raise
.
Метод fail
имеет три перегрузки:
-
fail
: поднимает aRuntimeError
без сообщения об ошибке. -
fail(string)
: поднимает aRuntimeError
со строковым аргументом как сообщение об ошибке:fail "Failed to open file"
-
fail(exception [, string [, array]])
: возникает исключение классаexception
(первый аргумент) с необязательным сообщением об ошибке (второй аргумент) и информацией обратного вызова (третий аргумент).Пример. Предположим, что вы определяете функцию, которая должна завершиться неудачей, если задан неверный аргумент. Лучше поднять
ArgumentError
, а не aRuntimeError
:fail ArgumentError, "Illegal String"
Другой пример: вы можете передать весь backtrace метод
fail
, чтобы вы могли получить доступ к трассе внутри блокаrescue
:fail ArgumentError, "Illegal String", caller
caller
- это метод Kernel, который возвращает backtrace как массив строк в формеfile:line: in 'method'
.
Без аргументов возникает исключение в $! или создает RuntimeError если $! равен нулю. С одним аргументом String возникает RuntimeError с строкой в виде сообщения. В противном случае первый параметр должен быть имя класса Exception (или объект, который возвращает исключение объект при отправке сообщения об исключении). Дополнительный второй параметр устанавливает сообщение, связанное с исключением, а третье Параметр представляет собой массив информации обратного вызова. Исключения пойманы с помощью команды rescue begin... end blocks.
Источник: Ruby Documentation на модуле ядра.