2015-09-21 5 views
0

Следующая:Почему блок `catch` называется, если нет` throw`?

catch :something do 
    print true 
end 

напечатает true на консоль. Я думал, что точкой catch было то, что он был вызван только соответствующим throw.

Менее важно, есть ли один синтаксис подкладки? Я был удивлен, что catch :something { print true } поднимает SyntaxError.

+0

В Ruby 'catch' блока для' throw', что в некоторых других языках 'try' блок будет, что может быть довольно consfusing. – Borsunho

+2

Если у вас есть два вопроса, задайте два вопроса. Ваш второй вопрос полностью не связан с первым вопросом, плюс, его уже спрашивали и отвечали десятки раз уже на StackOverflow. Не нужно повторять его на n + 1'-й раз (и получить неполный ответ, который рассматривает только симптом, но не объясняет первопричину, я мог бы добавить, не обижаюсь на @sawa). –

ответ

4
  • Почему является catch блок называется, если нет throw?

    Возможно, было throw раньше, и программист забыл удалить catch вместе, когда throw был удален, или не знает, как использовать catch.

    Но более вероятно, что в этом случае вам не удалось спросить «почему блокировка блокировки выполнена, если нет throw?» Ответ на этот вопрос заключается в том, что блок catch выполнен с точностью до throw. Если throw не поднят, то блок catch будет полностью выполнен.

  • Есть ли один синтаксис подкладки?

    Да. Не опускайте круглые скобки.

    catch(:something){print true} 
    
Смежные вопросы