[Ruby] Échapper à plusieurs boucles [Nest]

Je veux sortir de plusieurs boucles à la fois

Utilisez Kernel. # Throw et Kernel. # Catch.

sum = 0
catch(:escape_test) do
  for i in 1..3
    for j in 1..3
      sum = i + j
      # sum >Je veux m'échapper immédiatement quand il atteint 0
      throw(:escape_test) if sum > 0
    end
  end
end

p sum
=> 2

ʻI = 1, j = 1Puisque la condition desomme> 0est satisfaite au stade de la première addition, À ce stade,throw (: escape_test)est appelé pour échapper à la fois à **j for statement et ʻi for statement **.

En utilisant la même logique dans break pour comparaison:

sum = 0
for i in 1..3
  for j in 1..3
    sum = i + j
    #Échapper à la boucle j
    break if sum > 0
  end
end

p sum
=> 4

De cette façon, break échappe la boucle la plus interne (cette fois j's for statement), donc ʻi's for statement circule. Puisque le processus se termine lorsque ʻi = 3, j = 1, sum = 4.

Bonus: capture de la valeur de retour

sum = 0
c_value = catch(:escape_test) do
  for i in 1..3
    for j in 1..3
      sum = i + j
      # sum >Je veux m'échapper immédiatement quand il atteint 0
      throw(:escape_test, sum) if sum > 0
    end
  end
end

p c_value
=> 2

De cette façon, si vous passez une valeur au deuxième argument de throw, ce sera la valeur de retour de catch.

référence

Recommended Posts

[Ruby] Échapper à plusieurs boucles [Nest]
Ruby rejoint plusieurs tableaux
De Java à Ruby !!
Essayez d'utiliser Cocoa de Ruby
Utiliser le programme C de Ruby
[Ruby] Recevoir les entrées de la console
CHATBOT (Dialogflow) utilisé depuis Ruby