Immutable array initialization in shared static this
Jonathan M Davis
jmdavisProg at gmx.com
Fri Jul 13 03:28:42 PDT 2012
On Friday, July 13, 2012 12:15:33 Tommi wrote:
> The following code doesn't compile. It seems like a compiler bug
> to me, but I can't find a bug report about it. Is it a bug?
>
> private immutable(int[]) constants;
>
> shared static this()
> {
> constants.length = 10;
> constants[0] = 123; // Error: constants[0] isn't mutable
> }
It's not a bug. You have to initialize the entire array at once, since it's
immutable. By setting the length, you initialized the array such that it had
10 elements in it all of which were the init value of the element type (which
would be 0, since it's int). If you don't want to use an array litera like
constants = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
then create a mutable array which you then either idup and assign it to
constants, or you cast it to immutable (or use std.exception.assumeUnique,
which casts to immutable but is used to document the fact it is the only
reference to that data and therefore safe to cast to immutable) and then
assign it to constants.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list