7.8. Zatrzymywanie iteracji

Problem

Chcemy przerwać trwającą iterację z poziomu bloku kodowego.

Rozwiązanie

W najprostszym przypadku sprowadza się to do wykonania instrukcji break w treści bloku kodowego. Powoduje ona wyskok z najbardziej zagnieżdżonej pętli zdefiniowanej w metodzie sterującej blokiem kodowym:

1.upto(10) do |x|
  puts x
  break if x == 3
end
# 1
# 2
# 3

Dyskusja

Instrukcja break jest mechanizmem bardzo prostym, lecz jej używanie podlega pewnym ograniczeniom. Nie wolno jej używać w treści bloku, dla którego utworzono obiekt Proc za pomocą konstruktora Proc.new lub (w wersji 1.9 języka Ruby) metody Kernel#proc. Jeżeli stanowi to problem, należy zamiast tych metod użyć metody lambda.

aBlock = Proc.new do |x| puts x ...

Get Ruby. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.