I'm afraid what you're asking for is impossible. Because 'a' and
'b' are both slices, they each have their own 'length' field.
When you do 'a = []', you're effectively doing 'a.length = 0'.
There's no way to change 'b.length' through 'a'. To get that
effect, you'd have to do something like this:
int[] a = [1,2,3,4,5];
int[]* b = &a;
a = [];
assert(*b == [] && b.length == 0);
On Saturday, 24 October 2015 at 13:18:26 UTC, Shriramana Sharma
wrote:
Hello. I had first expected that dynamic arrays (slices) would
provide a `.clear()` method but they don't seem to. Obviously I
can always effectively clear an array by assigning an empty
array to it, but this has unwanted consequences that `[]`
actually seems to allocate a new dynamic array and any other
identifiers initially pointing to the same array will still
show the old contents and thus it would no longer test true for
`is` with this array. See the following code:
import std.stdio;
void main()
{
int a[] = [1,2,3,4,5];
int b[] = a;
writeln(a);
writeln(b);
//a.clear();
a = [];
writeln(a);
writeln(b);
}
which outputs:
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[]
[1, 2, 3, 4, 5]
How to make it so that after clearing `a`, `b` will also point
to the same empty array? IOW the desired output is:
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[]
[]
... and any further items added to `a` should also reflect in
`b`.