Я изучаю 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
В Ruby fail
является синонимом raise
. Ключевое слово fail
- это метод модуля Kernel
, который входит в класс Object
. Метод fail
вызывает ошибку времени выполнения, как и ключевое слово raise
.
Метод fail
имеет три перегрузки:
fail
: поднимает a RuntimeError
без сообщения об ошибке.
fail(string)
: поднимает a RuntimeError
со строковым аргументом как сообщение об ошибке:
fail "Failed to open file"
fail(exception [, string [, array]])
: возникает исключение класса exception
(первый аргумент) с необязательным сообщением об ошибке (второй аргумент) и информацией обратного вызова (третий аргумент).
Пример. Предположим, что вы определяете функцию, которая должна завершиться неудачей, если задан неверный аргумент. Лучше поднять ArgumentError
, а не a RuntimeError
:
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 на модуле ядра.
fail
== raise
Другими словами, fail
является просто популярным псевдонимом для метода повышения точности raise
. Использование:
fail ArgumentError, "Don't argue with me!"
Rubocop говорит об использовании обоих слов;
'Используйте
fail
вместоraise
, чтобы сигнализировать исключения.''Используйте
raise
вместоfail
для восстановления исключений.'
Вот пример.
def sample
fail 'something wrong' unless success?
rescue => e
logger.error e
raise
end
www.ruby-doc.org является вашим другом. Когда я googled rubydoc fail
" Kernel" был первым хитом. Мой совет, когда вы сомневаетесь, переходите к определенному источнику для таких вещей определения.