Поток выполнения в Ruby
У меня есть следующий запрос:
Вызвать пользовательский обработчик исключений KasayaError в методе robe, если тип аргумента не является строкой "Kasaya". В противном случае должно быть возвращено "одеяние касая Дхармагуптаки".
Я реализовал следующую функцию:
def robe(type)
if type != 'Kasaya'
raise KasayaError("Invalid")
end
return "Dharmaguptaka's Kasaya Robe"
end
Но когда я запустил его против rspec, я получил следующие результаты:
должен возвращать 'одеяние Касая Дхармагуптаки', если типом является неопределенный метод Kasaya NoMethodError 'Kasaya' для #RSpec::Core::ExampleGroup::Nested_157:0x000000029b1598
Мой вопрос, почему код сломался?
На мой взгляд, если параметром является Kasaya, оператор return будет выполнен, чтобы вернуть результат функции. Я прав?
1 ответ
если параметр не является Kasaya, оператор return будет выполнен, чтобы вернуть результат функции. Я прав?
Нет, это противоположно тому, для чего предназначен ваш код.
Если параметр не "Kasaya"
затем возникает исключение, и return
никогда не достигается В этом вся суть исключений: они позволяют методам "возвращаться" рано, раскручивая стек вызовов, пока не будет найден соответствующий обработчик исключений.
Единственный способ, которым поток выполнения достигает вас return
заявление если type
является "Kasaya"
, Тогда условие type != "Kasaya"
ложно и raise
никогда не достигается