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.