Я изучаю Ruby и обнаружил fail
ключевое слово. Что это значит?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
Я изучаю Ruby и обнаружил fail
ключевое слово. Что это значит?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
fail "Password too short" if password.length < 8
иfail "No user name set" unless username
Ответы:
В Ruby fail
это синоним raise
. fail
Ключевое слово является методом Kernel
модуля , который входит в классе Object
. fail
Метод вызывает ошибку во время выполнения так же , как raise
ключевое слово.
У fail
метода есть три перегрузки:
fail
: вызывает RuntimeError
без сообщения об ошибке.
fail(string)
: вызывает RuntimeError
со строковым аргументом как сообщение об ошибке:
fail "Failed to open file"
fail(exception [, string [, array]])
: вызывает исключение класса exception
(первый аргумент) с необязательным сообщением об ошибке (второй аргумент) и информацией обратного вызова (третий аргумент).
Пример: Предположим, вы определяете функцию, которая должна завершиться ошибкой при неверном аргументе. Лучше поднимать, ArgumentError
а не RuntimeError
:
fail ArgumentError, "Illegal String"
Другой пример: вы можете передать всю трассировку в fail
метод, чтобы получить доступ к трассировке внутри rescue
блока:
fail ArgumentError, "Illegal String", caller
caller
- это метод ядра, который возвращает трассировку в виде массива строк в форме file:line: in 'method'
.
Без аргументов вызывает исключение в $! или вызывает RuntimeError, если $! равно нулю. С одним аргументом String вызывает RuntimeError со строкой в виде сообщения. В противном случае первым параметром должно быть имя класса Exception (или объекта, который возвращает объект Exception при отправке сообщения об исключении). Необязательный второй параметр устанавливает сообщение, связанное с исключением, а третий параметр представляет собой массив информации обратного вызова. Исключения улавливаются условием восстановления блоков begin ... end.
Источник: Документация Ruby по модулю ядра .
raise
Рубокоп говорит об использовании обоих слов;
«Использовать
fail
вместо,raise
чтобы сигнализировать об исключениях».«Использовать
raise
вместо,fail
чтобы повторно выбросить исключения».
Вот пример.
def sample
fail 'something wrong' unless success?
rescue => e
logger.error e
raise
end
fail
== raise
Другими словами, fail
это просто популярный псевдоним raise
метода повышения ошибок. Применение:
fail ArgumentError, "Don't argue with me!"
www.ruby-doc.org - ваш друг. Когда я погуглил, rubydoc fail
" Ядро " было первым хитом. Мой совет: в случае сомнений, обращайтесь к исчерпывающим источникам подобных определений.
raise
при обработке исключений, аfail
когда нет.