Si quisiera hacer algo como esto:
collection.each do |i|
return nil if i == 3
..many lines of code here..
end
¿Cómo obtendría ese efecto? Sé que podría envolver todo dentro del bloque en una gran declaración if, pero me gustaría evitar el anidamiento si es posible.
Break no funcionaría aquí, porque no quiero detener la iteración de los elementos restantes.
next value
ybreak value
. Exactamente lo que estaba buscando.break value
no funcionó para mí, aunquenext value
funcionó bien. Muchas gracias.next
ybreak
de ninguna manera son específicos de las construcciones de bucle, por lo que el artículo que vinculó es muy engañoso (ya que implica en gran medida lo contrario). Y mis descripciones son definitivamente correctas cuandonext
ybreak
se usan dentro de bloques (tenga en cuenta quewhile
yfor
rara vez, si alguna vez, se usan en Ruby, por lo que el 99% de los usos denext
ybreak
están dentro de bloques).#!/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}"
fuente
En este caso, puede usar break para terminar el ciclo antes:
collection.each do |i| break if i == 3 ...many lines end
... por supuesto, esto supone que en realidad no está buscando devolver un valor, simplemente salga del bloque.
fuente
break
en Ruby -break 5
haráeach
que se devuelva 5.