Passing arguments to common iteration escape methods for better control in enumerables.
Ruby fornece dois meios de escapar de um enumerable: next
vai entrar a próxima iteração, sem uma avaliação adicional, e break
vai sair do enumerável inteiramente.
vamos dar uma olhada rápida em ambos com alguns exemplos simples.
# Example of `next`a = a.each do |num|
next if num < 2
puts num
end# console output
2
3
=>
No exemplo acima vemos que 1
não é impressa no console, porque a chamada de next
dispara na primeira iteração (1 é menor que 2), ignorando o puts
instrução. A condicional não é atendida, nos seguintes duas iterações e o puts
declaração de saídas num
para o console, como esperado, seguido por um retorno de a
.
# Example of `break`a = a.each do |num|
break if num < 2
puts num
end# console output
=> nil
Com break
algo totalmente diferente aconteceu. Aqui, na primeira iteração, 1 novamente é avaliado como sendo inferior a 2, e assim nossa chamada para break
é executada, deixando o enumerável inteiramente. Neste caso, vemos que as iterações futuras não ocorrem e nil
é devolvido.
embora esta fuga seja desejável, e se precisássemos devolver algo diferente de nil
? Felizmente, ambos break
e next
aceitam um argumento para definir manualmente um valor de retorno.
a Passagem de argumentos
Primeiro, vamos ver como ele funciona com break
:
a = a.each do |num|
break num if num < 2
puts num
end# console output
=> 1
Aqui temos passado num
como o argumento de break
(lembre-se que os parênteses são opcionais em Ruby, portanto, break num
e break(num)
são avaliados de forma idêntica) e especificado manualmente o valor de retorno. Se alguma vez precisar de devolver algo que não seja nil
quando break
for despoletado, isto pode ser excepcionalmente útil.