[Ruby] Entkomme aus mehreren Schleifen [Nest]

Ich möchte aus mehreren Schleifen gleichzeitig herauskommen

Verwenden Sie "Kernel. # Throw" und "Kernel. # Catch".

sum = 0
catch(:escape_test) do
  for i in 1..3
    for j in 1..3
      sum = i + j
      # sum >Ich möchte sofort entkommen, wenn es 0 erreicht
      throw(:escape_test) if sum > 0
    end
  end
end

p sum
=> 2

Da die Bedingung von "Summe> 0" im Stadium der ersten Addition von "i = 1" erfüllt ist, ist j = 1 ", An diesem Punkt wird throw (: Escape_test) aufgerufen, um ** sowohl aus dem j für Anweisung als auch aus dem i für Anweisung ** zu entkommen.

Verwenden Sie zum Vergleich dieselbe Logik in "break":

sum = 0
for i in 1..3
  for j in 1..3
    sum = i + j
    #Entkomme aus der j-Schleife
    break if sum > 0
  end
end

p sum
=> 4

Auf diese Weise entgeht break der innersten Schleife (diesmal der for-Anweisung von j)**, sodass dasi for-Anweisung` umgeht. Da der Prozess endet, wenn "i = 3, j = 1", "Summe = 4".

Bonus: Rückgabewert fangen

sum = 0
c_value = catch(:escape_test) do
  for i in 1..3
    for j in 1..3
      sum = i + j
      # sum >Ich möchte sofort entkommen, wenn es 0 erreicht
      throw(:escape_test, sum) if sum > 0
    end
  end
end

p c_value
=> 2

Wenn Sie auf diese Weise einen Wert an das zweite Argument von "throw" übergeben, ist dies der Rückgabewert von "catch".

Referenz

Recommended Posts

[Ruby] Entkomme aus mehreren Schleifen [Nest]
Ruby Verbindet mehrere Arrays
Von Java zu Ruby !!
Versuchen Sie es mit Cocoa von Ruby
Verwenden Sie das C-Programm von Ruby
[Ruby] Empfangen Sie Eingaben von der Konsole
CHATBOT (Dialogflow) von Ruby