I encountered the first behavior while using while, so make a note of it.
a = 0 while if a == 5 break end a += 1 end puts a #Execution result: 0
b = 0 while b += 1 if b == 5 break end end puts b #Execution result: 5
c = 0 while c < 5 do c += 1 end puts c #Execution result: 5
d = 0 loop do if d == 5 break end d += 1 end puts d #Execution result: 5
e = 0 loop do e += 1 if e == 5 break end end puts e #Execution result: 5
As a result I expected, I thought that
5 would output even with phenomenon _A.
(It was solved by @ scivola's comment.)
Apparently, the expression immediately after
while is evaluated as a conditional expression. In other words, in this phenomenon_A,
if a == 5 break end
This part is evaluated for the first time as a conditional expression of
while, and of course ʻa == 5
and the value of ʻif expression becomes
nil, so it seems that it has escaped from the loop.
By the way, in Ruby, all values except
When I gave a conditional expression as follows, the processing in the loop was executed.
a = 0 while true do #do is optional if a == 5 break end a += 1 end puts a #Execution result: 5
The pitfall of this time was that the expression inside the loop was actually a conditional expression.
2020/07/04 17:11 In the comment, @scivola explained the cause of the problem, so I edited "Why this happens". 2020/07/04 17:31 I changed the title to match the content and proofread the text a little.
I don't usually use
loop, but use another iterative method.