This line:

t1 = testtype( false )

creates a new object and binds it to the variable t1. It has no effect on
the value that previously was bound to t1 or any structure set which
contains that object.


On Mon, May 12, 2014 at 2:43 PM, Andrew Dabrowski <unhandya...@gmail.com>wrote:

> This is probably OO 101, but I'm puzzled by how references work in sets.
> Here's a minimal example.
>
> julia> type testtype v::Bool end
>
> julia> t1 = testtype( true )
> testtype(true)
>
> julia> t2 = testtype( false )
> testtype(false)
>
> julia> tset = Set{testtype}({t1,t2})
> Set{testtype}({testtype(true),testtype(false)})
>
> julia> t1.v = false
> false
>
> julia> tset
> Set{testtype}({testtype(false),testtype(false)})
>
> julia> t1.v = true
> true
>
> julia> tset
> Set{testtype}({testtype(true),testtype(false)})
>
>
> So far so good, this all makes sense to me: tset contains references to t1
> and t2, and when I make a change t1 it is reflected in tset accordingly.
> But...
>
> julia> t1 = testtype( false )
> testtype(false)
>
> julia> tset
> Set{testtype}({testtype(true),testtype(false)})
>
>
>
> I would have thought "t1 = testtype( false )" redefined the reference,
> which would also be reflected in tset, but tset still points to the old
> value.
>
> In that case, what is the proper way to modify a single element of tset in
> place?  With a more complicated type it may be inconvenient to modify each
> property of t1.  In particular I may have a constant value of type testtype
> that I'd like to substitute for t1.
>
>

Reply via email to