Surprise with array idup method
Philip Daniels
foo at foo.com
Thu Aug 23 15:32:45 PDT 2012
On Thursday, 23 August 2012 at 22:03:04 UTC, Jonathan M Davis
wrote:
> On Thursday, August 23, 2012 23:55:10 Philip Daniels wrote:
>> auto x = [1,2,3];
>> auto y = x.idup;
>> y ~= 99; // fine!
>> y[0] = 99; // "Error: y[0] isn't mutable"
>> y.clear; // fine!
>>
>>
>> So idup is returning an "immutable(int)[]" rather than an
>> "immutable int[]".
>>
>> I find this a bit surprising. Anybody else?
>
> It's the same thing that slicing does. The result is
> tail-const. And since you
> can assign it to immutable int[] if you want to, it's more
> flexible this way.
> It just means that auto gives you a mutable array with
> immutable elements
> rather than an immutable array. And if you don't want to care
> what the type is
> but still want it to be full immutable, then just use immutable
> rather than
> auto:
>
> immutable y = x.idup;
>
> - Jonathan M Davis
Thanks for the explanation Jonathan. Another thing to add to me
cheat sheet of D-isms :-)
More information about the Digitalmars-d-learn
mailing list