ref semantics with hashes
    Andrej Mitrovic 
    andrej.mitrovich at gmail.com
       
    Wed May  2 15:38:52 PDT 2012
    
    
  
On 5/2/12, Jonathan M Davis <jmdavisProg at gmx.com> wrote:
> The way that AAs work in this regard is identical to how dynamic arrays
> work.
Yes but they're very different in other regards. For example, if you
add an element to one array it doesn't automatically add an element to
the other array:
    int[] a = new int[](2);
    auto b = a;
    b ~= 1;
    a ~= 2;  // boom, a is now a new array
    writeln(a);  // [0, 0, 2]
    writeln(b);  // [0, 0, 1]
This is different from hashes, where adding a new element doesn't
magically create a new hash:
    int[int] ha = [0:0];
    auto hb = ha;
    hb[1] = 1;
    writeln(ha);  // [0:0, 1:1]
    writeln(hb);  // [0:0, 1:1]
But maybe this is more relevant to how nulls and references work
rather than anything about hashes.
In fact what would *actually* solve this problem (for me) is if/when
we have aliases implemented for this scenario:
import std.stdio;
struct Foo
{
   int[] hash;
}
void main()
{
    Foo foo;
    alias foo.hash hash2;
    hash2[0] = 1;
    writeln(foo.hash);  // [1:1]
    writeln(hash2);     // [1:1]
}
Hopefully we get that one day.
    
    
More information about the Digitalmars-d-learn
mailing list