Поток выполнения в 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 никогда не достигается

Другие вопросы по тегам