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