2014-10-04 4 views
2

У меня возникла ошибка синтаксиса, выполняющая следующий фрагмент кода Ruby.catch/try block не работает в Ruby

catch(:outer) 
    m, n = 1,1 
    loop do 
    catch(:inner) 
     for i in 3 .. 100 
     m, n = (m*2), m 
     throw :outer if m > 9_999 
     throw :inner if m > 5_000 
     end   # for-loop 
    end   # catch(:inner) 
    end # loop 
end # catch(:outer) 
#=> syntax error, unexpected keyword_end, expecting $end 

Он не любит двух end заявления в конце. Что с этим не так?

+0

Рассмотрим 'значение задвижка сделать ..' вместо синтаксиса. – user2864740

ответ

2

У вас нет do после catch, который соответствует end. Номер end должен соответствовать do или ключевому слову (например, class, module, begin). catch - это метод, а не ключевое слово.

+0

Да, это преступник. спасибо – user1972031

4

Правильный синтаксис будет:

catch(:outer) do 
    m, n = 1,1 
    loop do 
    catch(:inner) do 
     for i in 3 .. 100 
     m, n = (m*2), m 
     throw :outer if m > 9_999 
     throw :inner if m > 5_000 
     end   # for-loop 
    end   # catch(:inner) 
    end # loop 
end # catch(:outer) 

рубин блоки совпадают с сделай конец пары или {}, поймать конец не рубин заявление как для-конца

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