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.
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.