Управление потоком рубинов

Я не могу найти полезные ресурсы в Интернете, которые разбивают различные варианты управления потоком Ruby.

Предположим, что я выполняю итерацию по массиву внутри метода:

def a_method
   things.each do |t|
      # control options?
   end
end

Какие у меня варианты управления потоком? Как они отличаются?

  • повторная попытка
  • возвращение
  • перерыв
  • Следующий
  • redo

Ответ 1

retry может использоваться внутри блока спасения, чтобы вернуться в начальный блок после того, как условие, вызвавшее исключение, было исправлено. Внутри блока он имеет эффект прыжка до начала метода уступа. Таким образом, внутри каждого это означает, что повтор будет переходить к началу цикла.

return вернется из метода, в котором он находится внутри - в этом случае из a_method.

break вернется из метода yielding - в этом случае из each (который будет отличаться от возврата из a_method, если что-то произошло между концом каждого блока и концом a_method).

next вернется из блока и, таким образом, перейдет к следующему элементу в things.

redo перейдет в начало блока и, таким образом, повторит текущую итерацию.