Ok, thanks for explaining that, that makes lots more sense but to me is not
immediately obvious, I would have expected the type of x in f2 to change to
Float64 as the chained expression was evaluated from right to left, so the
consequence of this not happening is unexpected for me! I don't think one
is better or worse than the other as long as it is consistent for the
language, now I know what happens I can avoid using them when I want
something different to happen.
For clarity can you please let me know that this is the right
interpretation for what happens in a chained expression?
function f2()
y::Float64
# the chained assignment below results in the equivalent of (but the
order may be different)
# x = 0
# y = 0
# return 0
x = y = 0
end
On Thursday, June 5, 2014 12:32:03 AM UTC+8, Stefan Karpinski wrote:
>
> The reason that assignments return the unconverted value of their right
> hand side is so that assignment chains behave as expected instead of the
> assignments to the right subtly and surprisingly affecting assignments to
> the left. Otherwise you would have unfortunate effects like this:
>
> function f1()
> x = y = 0
> return x
> end
>
> function f2()
> y::Float64
> x = y = 0
> return x
> end
>
> julia> f1()
> 0
>
> julia> f2()
> 0.0
>
>
> This is NOT what currently happens – these return the same value, i.e. 0 –
> this is a mockup of what would happen if the expression y = 0 evaluated to
> the value that is assigned to y after conversion rather than the value 0
> before conversion.
>
>