J'ai rencontré le premier comportement lors de l'utilisation de while, alors notez-le.
ruby: 2.7.1
a = 0
while
if a == 5
break
end
a += 1
end
puts a
#Résultat de l'exécution: 0
b = 0
while
b += 1
if b == 5
break
end
end
puts b
#Résultat d'exécution: 5
c = 0
while c < 5 do
c += 1
end
puts c
#Résultat d'exécution: 5
d = 0
loop do
if d == 5
break
end
d += 1
end
puts d
#Résultat d'exécution: 5
e = 0
loop do
e += 1
if e == 5
break
end
end
puts e
#Résultat d'exécution: 5
En conséquence, je m'y attendais, je pensais que «5» sortirait même dans le phénomène _A.
(Il a été résolu par le commentaire de @ scivola.)
Apparemment, l'expression immédiatement après «while» est évaluée comme une expression conditionnelle. En d'autres termes, dans ce phénomène_A,
if a == 5
break
end
Cette partie a été évaluée pour la première fois comme une expression conditionnelle de «while», et bien sûr «a == 5» est devenu «faux» et la valeur de «si» expression est devenue «nil», il semble donc qu'elle était hors de la boucle.
D'ailleurs, dans Ruby, toutes les valeurs sauf «nil» et «false» sont «true».
Lorsque j'ai donné une expression conditionnelle comme suit, le traitement dans la boucle a été exécuté.
a = 0
while true do #faire est facultatif
if a == 5
break
end
a += 1
end
puts a
#Résultat d'exécution: 5
Le piège de cette époque était que la formule à l'intérieur de la boucle était en fait une formule conditionnelle.
2020/07/04 17:11 Dans le commentaire, @scivola a expliqué la cause du problème, j'ai donc édité "Pourquoi cela se produit". 2020/07/04 17:31 J'ai changé le titre pour qu'il corresponde au contenu et calibré un peu le texte.
Je n'utilise généralement pas while
ou loop
, mais j'utilise une autre méthode itérative.
Recommended Posts