@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 <javascript:>> 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.
>>
>

Reply via email to