Я вивчаю 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
а не a RuntimeError
:
fail ArgumentError, "Illegal String"
Інший приклад: Ви можете передати всю трасування до fail
методу , так що ви можете отримати доступ до сліду всередині rescue
блоку:
fail ArgumentError, "Illegal String", caller
caller
- це метод ядра, який повертає зворотну траєкторію як масив рядків у формі file:line: in 'method'
.
Без аргументів викликає виняток у $! або викликає RuntimeError, якщо $! дорівнює нулю. За допомогою одного аргументу String піднімає RuntimeError із рядком як повідомлення. В іншому випадку першим параметром має бути ім'я класу винятків (або об'єкта, який повертає об'єкт винятку, коли надсилається повідомлення про виняток). Необов’язковий другий параметр встановлює повідомлення, пов’язане з винятком, а третій параметр - це масив інформації про зворотний виклик. Винятки охоплює пункт порятунку блоків 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
коли ні.