Я изучаю 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когда нет.