While we're at it...
Why does this work:

reinterpret(Float32, Int32(0))
@assert isbits(ImmutableType1) && isbits(ImmutableType2) && 
(sizeof(ImmutableType1) == sizeof(ImmutableType2)) 
reinterpret(ImmutableType1, Array(ImmutableType2, 42))

but this does not:

reinterpret(ImmutableType1, ImmutableType2(...))

Am Sonntag, 8. Februar 2015 21:35:20 UTC+1 schrieb [email protected]:
>
> I would like to request the following language feature: a function or 
> macro to modify a field of an immutable inside a container.  Consider:
>
> immutable T
>   fielda::Int
>   fieldb::Int
>   fieldc::Int
> end
>
> function modify_fieldc!(x::Array{T,1}, sub::Int, newc::Int)
>    x[sub] = T(x[sub].fielda, x[sub].fieldb, newc)
> end
>
> This function modifies one field of an immutable object that sits inside a 
> container.  The above construct, namely:
>    x[sub] = T(x[sub].field1, x[sub].field2, ... , newval, ... 
> x[sub].fieldn)
> occurs rather frequently in my code.  It is not very readable and is also 
> fragile in the case that I modify my code and put more fields in T later. 
> It would be much nicer if there were a universal function like this:
>    modifyField!(x, sub, fieldc, newc)
>
> Note that I declared T to be 'immutable' rather than 'type' for 
> performance reasons-- I prefer the data in the array x to be packed in 
> memory rather than accessed with pointers.  If T were a 'type' then 
> obviously the problem would go away.
>
> Maybe it is already possible to write a function or macro for this purpose 
> in the existing language?
>
> Thanks,
> Steve Vavasis
>
>

Reply via email to