Я изучаю 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" был первым хитом. Мой совет, когда вы сомневаетесь, переходите к определенному источнику для таких вещей определения.