You can't modify an immutable. There are no exceptions. Even when I implement this optimization, it will still not enable you to modify an immutable. It will just provide a simpler way of writing something that could already be done to mutable types.
Why do you insist on writing `pointer([x])`? I have repeated said that is an invalid code fragment. However, in this case, perhaps you meant `unsafe_store(C.range,z)`? On Tue, Feb 24, 2015 at 11:36 AM J Luis <[email protected]> wrote: > > > use unsafe_load() to convert the value to a julia object, then >> unsafe_store() to write the new struct back. >> >> at some point, I want to modify unsafe_load/unsafe_store to take a >> fieldname symbol as the second argument to make this functionality more >> direct available. however, there hasn't seemed to be a request / issue open >> for it yet. >> > > PLEASE, do. > > I have the same type of problem but I'm not able to solve it with the > solutions proposed in this thread. > See, I have this and want to change the *rgb_low* > > julia> gmt_lut = unsafe_load(C.range, 1); > > julia> gmt_lut.rgb_low > GMT.Array_4_Cdouble(0.583333333333333,0.0,1.0,0.0) > > which is a > > immutable Array_4_Cdouble > d1::Cdouble > d2::Cdouble > d3::Cdouble > d4::Cdouble > end > > so I do > > julia> z = GMT.Array_4_Cdouble(0.0, 0.0, 0.0, 0.0) > GMT.Array_4_Cdouble(0.0,0.0,0.0,0.0) > > julia> unsafe_store!(pointer([gmt_lut.rgb_low]), z) > Ptr{GMT.Array_4_Cdouble} @0x00000000819faf60 > > no errors but I don't know where new *z* immutable landed on because I > keep seeing the old value > > julia> gmt_lut.rgb_low > GMT.Array_4_Cdouble(0.583333333333333,0.0,1.0,0.0) > > I suspect part of it is dues to the pointer([gmt_lut.rgb_low]) command > because when I do several of those on line I keep getting different > addresses > > julia> pointer([gmt_lut.rgb_low]) > Ptr{GMT.Array_4_Cdouble} @0x0000000082b7baf0 > > julia> pointer([gmt_lut.rgb_low]) > Ptr{GMT.Array_4_Cdouble} @0x0000000082ba00d0 > > julia> pointer([gmt_lut.rgb_low]) > Ptr{GMT.Array_4_Cdouble} @0x0000000082ba0670 > > but than how can modify this field(s)? > > > > >
