Hello!
x = 10
ax = Ref(x)
x = 90
println(ax[]) # why 10 ?
Hello!
x = 10
ax = Ref(x)
x = 90
println(ax[]) # why 10 ?
Here’s a step by step explanation of what your program does:
x = 10
This binds the value 10 to a variable x. Using x or the literal 10 should now be interchangeable.
ax = Ref(x)
This plops the value of x into a Ref and names that object ax. What you did is fully equivalent to ax = Ref(10).
x = 90
This just rebinds the variable x to point to the value 90 instead of 10 for future uses. This rebinding is not retroactive.
println(ax[])
is then ‘equivalent’ to
println(Ref(10)[]
and
println(10)
thank you
how to get value 90 from reference?
Try this:
x = 10
ax = Ref(x)
ax[] = 90
println(ax[])
the line ax[] = 90 says mutate the Ref so that it not stores 90 instead of 10.
but, how to get the correct value from ref when changing x ?
why not taking a composite type? This is typesafe and needs no explicit pointers:
x = [10]
ax = x
x[1] = 90
ax[1]
90
or:
mutable struct mytype
y::Int
end
x = mytype(10)
ax = x
x.y = 90
ax.y
90
Why is this so? You could in your second assignment do x = 90.0. Then x would change to a Float64 and ax would be in trouble. try like in C int x 10:
julia> x::Int = 10
ERROR: syntax: type declarations on global variables are not yet supported
....
It is strictly not allowed for assigning to a simple local variable to have such a effect so what you are asking for is impossible.