array - for ruby
En Ruby, ¿cómo puedo omitir un bucle en un bucle.each, similar a ''continuar'' (2)
Esta pregunta ya tiene una respuesta aquí:
- Equivalente de "continuar" en Ruby 6 respuestas
En Ruby, ¿cómo me salto un bucle en un bucle .each
, similar a continue
en otros idiomas?
Use next
:
(1..10).each do |a|
next if a.even?
puts a
end
huellas dactilares:
1
3
5
7
9
Para más frialdad revisa también redo
y retry
.
Funciona también para amigos como times
, upto
, downto
, each_with_index
, select
, map
y otros iteradores (y más generalmente bloques).
Para obtener más información, consulte http://ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html#UL .
next
, es como return
, pero para bloques! (Así que puedes usar esto en cualquier proc
/ lambda
también).
Eso significa que también puede decir next n
para "return" n
del bloque. Por ejemplo:
puts [1, 2, 3].map do |e|
next 42 if e == 2
e
end.inject(&:+)
Esto rendirá 46
.
Tenga en cuenta que el return
siempre se devuelve desde la def
más cercana, y nunca un bloque; Si no hay una def
envolvente, el return
es un error.
Usar el return
desde dentro de un bloque intencionalmente puede ser confuso. Por ejemplo:
def my_fun
[1, 2, 3].map do |e|
return "Hello." if e == 2
e
end
end
my_fun
dará como resultado "Hello."
, no [1, "Hello.", 2]
, porque la palabra clave return
pertenece a la def
externa, no al bloque interno.