On 2 May 2010 15:24:52 UTC+2, Nobuyoshi Nakada <nobu / ruby-lang.org> wrote:
> It feels too confusing to me.
>
> Nobu Nakada
>

Thanks for the patch, Nobu.

So, how would this cause unexpected behavior ?

Let's say 'ret' is the return value of the last statement in the body
of the loop.

- If 'break' is not used in the loop (while/until), it will now result
in 'ret', or false if never evaluated.

Before, it always returned nil, which is not interesting and should
never have been used.
So that case is not relevant I think.

- if 'break' is used, it can return 'ret' ,
*if* the condition of the loop is met before break's condition.

So:
i = 0
ret = while i < 3
  i += 1
  break "break" if i > 3
  "loop return value"
end #=> ret = "loop return value" instead of nil

Would someone check for 'ret' to be nil?
Is there any real use case of using 'ret' (which would be nil) in this
situation ?

I think if you don't break, you would not use any value depending on
the return value of the loop.

Please say if you think this can break compatibility, and of course
any opinion is appreciated !

Regards,
B.D.