Yeah thanks, figured there was a simple solution, is this being affected by the big tuple/vararg overhaul?
On 2 May 2015 at 14:37, Mauro <[email protected]> wrote: > Splat the fields? > > function mutateimmutable{T<:Component}(c::T) > fields=getargs(c) > mutate!(fields) > return T(fields...) > end > > > On Sat, 2015-05-02 at 12:15, Marcus Appelros <[email protected]> > wrote: >> One very crude way it can be done: >> >> function mutateimmutable(c::Component) >> fields=getargs(c) >> mutate!(fields) >> if length(fields)==1 >> return typeof(c)(fields[1]) >> elseif length(fields)==2 >> return typeof(c)(fields[1],fields[2]) >> #etc... >> end >> end >> >> On 2 May 2015 at 12:43, Mauro <[email protected]> wrote: >>> Maybe some pseudo code would make understanding your problem easier? >>> >>> On Sat, 2015-05-02 at 10:34, Marcus Appelros <[email protected]> >>> wrote: >>>> This is the use case: abstract Component with a getargs(c::Component) that >>>> returns an array with the fields of components, for concreteness lets say a >>>> Der type with the fields x and dy. We want to be able to fetch the fields, >>>> mutate the array (say replace all :a with :b^2) and then return a mutated >>>> immutable instance, and we want it defined generally on Component so no >>>> inner constructors. How? >>> >
