Gdybym chciał zrobić coś takiego:
collection.each do |i|
return nil if i == 3
..many lines of code here..
end
Jak uzyskać taki efekt? Wiem, że mógłbym po prostu zawinąć wszystko wewnątrz bloku w duże wyrażenie if, ale chciałbym uniknąć zagnieżdżania, jeśli to możliwe.
Break nie zadziała tutaj, ponieważ nie chcę przerywać iteracji pozostałych elementów.
next value
ibreak value
. Dokładnie to, czego szukałem.break value
nie działało dla mnie, alenext value
działało dobrze. Wielkie dzięki.next
i niebreak
są w żaden sposób specyficzne dla konstrukcji zapętlonych, więc artykuł, który łączysz, jest bardzo mylący (ponieważ silnie sugeruje coś przeciwnego). I moje opisy są zdecydowanie poprawna, kiedynext
ibreak
są używane wewnątrz bloków (zauważ, żewhile
ifor
są rzadko, jeśli w ogóle, stosowany w Ruby więc 99% zastosowańnext
ibreak
są w blokach).#!/usr/bin/ruby collection = [1, 2, 3, 4, 5 ] stopped_at = collection.each do |i| break i if i == 3 puts "Processed #{i}" end puts "Stopped at and did not process #{stopped_at}"
źródło
W tym przypadku możesz użyć break, aby wcześniej zakończyć pętlę:
collection.each do |i| break if i == 3 ...many lines end
... oczywiście przy założeniu, że tak naprawdę nie chcesz zwrócić wartości, po prostu wyrwij się z bloku.
źródło
break
w Rubim -break 5
spowodujeeach
zwrócenie 5.