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