109 votes

Comment puis-je retourner quelque chose tôt d'un bloc?

Si je voulais faire quelque chose comme ça:

 collection.each do |i|
   return nil if i == 3

   ..many lines of code here..
end
 

Comment pourrais-je obtenir cet effet? Je sais que je pourrais simplement envelopper tout dans le bloc dans une grosse déclaration if, mais j'aimerais éviter la nidification si possible.

Pause ne fonctionnerait pas ici, parce que je ne veux pas arrêter l' itération des éléments restants.

218voto

sepp2k Points 157757

next intérieur d'un bloc revient du bloc. break intérieur d'un bloc revient de la fonction qui a cédé au bloc. Pour each cela signifie que break quitte la boucle et next passe à la prochaine itération de la boucle (donc les noms). Vous pouvez renvoyer des valeurs avec next value et break value .

13voto

JD. Points 1448
#!/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}"

5voto

Sniggerfardimungus Points 5207

Dans ce cas, vous pouvez utiliser break pour terminer la boucle plus tôt:

 collection.each do |i|
  break if i == 3
  ...many lines
end
 

... bien sûr, en supposant que vous ne cherchiez pas à renvoyer une valeur, sortez simplement du bloc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X