Ich habe das erste Verhalten bei der Verwendung von while festgestellt. Notieren Sie sich dies.
ruby: 2.7.1
a = 0
while
if a == 5
break
end
a += 1
end
puts a
#Ausführungsergebnis: 0
b = 0
while
b += 1
if b == 5
break
end
end
puts b
#Ausführungsergebnis: 5
c = 0
while c < 5 do
c += 1
end
puts c
#Ausführungsergebnis: 5
d = 0
loop do
if d == 5
break
end
d += 1
end
puts d
#Ausführungsergebnis: 5
e = 0
loop do
e += 1
if e == 5
break
end
end
puts e
#Ausführungsergebnis: 5
Als Ergebnis erwartete ich, dass "5" sogar im Phänomen _A ausgegeben werden würde.
(Es wurde durch @ scivolas Kommentar gelöst.)
Anscheinend wird der Ausdruck unmittelbar nach "while" als bedingter Ausdruck ausgewertet. Mit anderen Worten, in diesem Phänomen_A,
if a == 5
break
end
Dieser Teil wird zum ersten Mal als bedingter Ausdruck von "while" ausgewertet, und natürlich wird "a == 5" zu "false" und der Wert des "if" -Ausdrucks zu "nil", sodass es den Anschein hat, als sei er aus der Schleife entkommen.
Übrigens sind in Ruby alle Werte außer "nil" und "false" "true".
Wenn ich einen bedingten Ausdruck wie folgt gab, wurde die Verarbeitung in der Schleife ausgeführt.
a = 0
while true do #do ist optional
if a == 5
break
end
a += 1
end
puts a
#Ausführungsergebnis: 5
Die Falle dieser Zeit war, dass die Formel innerhalb der Schleife tatsächlich eine bedingte Formel war.
2020/07/04 17:11 In dem Kommentar erklärte @scivola die Ursache des Problems und ich bearbeitete "Warum dies passiert". 2020/07/04 17:31 Ich habe den Titel geändert, um ihn dem Inhalt anzupassen, und den Text ein wenig kalibriert.
Normalerweise verwende ich nicht "while" oder "loop", sondern eine andere iterative Methode.
Recommended Posts