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