2015-01-22 2 views
0

У меня есть следующие reques:Выполнение потока в Рубине

Поднимите обработчик исключений KasayaError в методе халата, если тип аргумента не является String «кашая». Он должен вернуться «дхармагуптака в кашая Robe» в противном случае

Я выполнил следующую функцию:

def robe(type) 
    if type != 'Kasaya' 
    raise KasayaError("Invalid") 
    end 
    return "Dharmaguptaka's Kasaya Robe" 
end 

Но когда я запустил его на RSpec, я получил следующие результаты:

должен вернуться " дхармагуптака в кашая Robe 'если тип '' кашая NoMethodError неопределенный метод `KasayaError' для #RSpec :: Основной :: ExampleGroup :: Nested_157: 0x000000029b1598

Мой вопрос, почему код сломался?

На мой взгляд, если параметр Kasaya, оператор возврата будет выполнен, чтобы вернуть результат функции. Я прав?

+0

«Тип», который вы отправляете в функцию, не является «Kasaya», и он пытается создать исключение, используя класс, который не определен. Где вы определяете «KasayaError»? – meagar

+0

OK Я понимаю –

+0

@meagar: Нет, он пытается создать исключение, вызвав метод 'KasayaError', здесь нет классов. –

ответ

2

Если параметр не является Kasaya, оператор возврата будет выполнен, чтобы вернуть результат функции. Я прав?

Нет, это противоположность тому, что предназначен для вашего кода.

Если параметр не "Kasaya", тогда возникает исключение, и return никогда не будет достигнуто. В этом все исключения: они позволяют методам «возвращаться» раньше, отматывая стек вызовов до тех пор, пока не будет найден соответствующий обработчик исключений.

Единственный способ поток выполнения достигает вас return заявление, если typeявляется"Kasaya". Тогда условие type != "Kasaya" является ложным, и raise никогда не достигается.

+0

Вы верны. См. Мою отредактированную версию «На мой взгляд, если параметр Kasaya, оператор return будет выполнен, чтобы вернуть результат функции. Правильно ли?» –

Смежные вопросы