Array declaration warning

Meta via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jun 4 04:27:12 PDT 2015


On Wednesday, 3 June 2015 at 21:05:42 UTC, Ali Çehreli wrote:
> On 06/03/2015 01:45 PM, Paul wrote:
>
> > On Wednesday, 3 June 2015 at 20:33:02 UTC, Ali Çehreli wrote:
> >> > pathList[][n] ~= CoOrd(cX, cY);
> >>
> >> I don't think you need the empty [] there. pathList[n] is
> one of the
> >> paths and you are adding a coordinate to it:
> >
> > Urgh, *that* is how I was confusing myself, the rest of the
> code 'looks
> > right'. Strange that it compiles without warning and the
> spurious []
> > have no effect though.
>
> [] means "a slice to all elements". There is no difference in 
> your code because pathList is already "a slice to all elements".
>
> Here are a couple of use cases:
>
> 1) Being able to traverse a fixed-length array as a range:
>
> import std.stdio;
> import std.algorithm;
>
> void main()
> {
>     int[2] arr = [ 1, 2 ];
>
>     writeln(arr.map!(a => a * 10)); // COMPILATION ERROR
> }
>
> The last line cannot be compiled because a fixed-length array 
> cannot provide popFront() because its length cannot be changed.
>
> The fix is to slice all elements first by inserting []:
>
>     writeln(arr[].map!(a => a * 10));
>
> There, arr[] is a temporary slice that gets consumed as a range.
>
>
> 2) [] enables array-wise operations:
>
>     int[] arr = [ 1, 2 ];
>     arr[] *= 10;    // Multiplies all elements by 10
>
>     arr[] = 42;     // sets all elements to 42
>
>
> Note the important difference it makes here:
>
>     int[] a = [ 1, 2 ];
>     int[] b = [ 3, 4 ];
>
>     a[] = b;    // makes the elements of 'a' same as 'b's 
> elements
>     a = b;      // makes 'a' be another slice to 'b's elements
>
> You won't see any difference between the two lines above if you 
> print 'a', but in the first case a.ptr != b.ptr and in the 
> second case a.ptr == b.ptr.
>
> Ali

Isn't a[] = b deprecated syntax? I believe you have to use a[] = 
b[] now.


More information about the Digitalmars-d-learn mailing list