Я вивчаю 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коли ні.