Thanks all, those look like neat solutions.
------------------------------------------ Carlos On Fri, May 16, 2014 at 11:36 PM, Stefan Karpinski <ste...@karpinski.org>wrote: > When you write fill!(arr, ChannVals()) you are asking to fill arr with > the one value that is the result of evaluating ChannVals() once. Doing > anything else would be bizarre. We could have a version of fill! that takes > a thunk so you could write > > fill!(arr) do > ChannVals() > end > > > That would have the desired effect as well, but it seems to me that using > a comprehension is just as easy in that case. > > > On Fri, May 16, 2014 at 4:21 PM, Ivar Nesje <iva...@gmail.com> wrote: > >> @Jameson They are immutable, but they contain references to mutable >> arrays, and all the immutable types will reference the same arrays. That >> way you would not just need a copy but a deepcopy. That will probably be >> too much overhead for fill!(), and will be problematic if someone decided >> to fill! an array with some large structure. >> >> On the other hand, I think it would be reasonable for fill! to take a >> shallow copy of mutable types. Not sure what others think on that subject >> though. >> >> Ivar >> >> kl. 17:01:56 UTC+2 fredag 16. mai 2014 skrev Jameson følgende: >>> >>> Since they are immutable, fill! did exactly what you wanted >>> >>> On Friday, May 16, 2014, Tim Holy <tim....@gmail.com> wrote: >>> >>>> Try >>>> >>>> arr = [ChannVals() for i = 1:10] >>>> >>>> On Friday, May 16, 2014 01:27:18 AM Carlos Becker wrote: >>>> > Hello all, >>>> > >>>> > I wanted to create an array of an immutable type and initialize an >>>> empty >>>> > copy in each (with the default constructor). >>>> > I am wondering which is the best way to do it, so far: >>>> > >>>> > immutable ChannVals >>>> > taus::Vector{Float64} >>>> > alphas::Vector{Float64} >>>> > >>>> > ChannVals() = new( Float64[], Float64[] ) >>>> > end >>>> > >>>> > # create 10 new instances >>>> > arr = ChannVals[ChannVals() for i=1:10] >>>> > >>>> > >>>> > Now, a neat but incorrect way is to do >>>> > >>>> > arr = Array( ChannVals, 10 ) >>>> > fill!(allVals, ChannVals()) >>>> > >>>> > because it will fill them with the same instance. >>>> > Is there a neat way, such as a fillwithcopies!() ? >>>> > >>>> > >>>> > Cheers. >>>> >>> >