Thread overview
why is this an invalid code?
Oct 30, 2010
thanate
Oct 30, 2010
Jonathan M Davis
Oct 30, 2010
thanate
Oct 30, 2010
bearophile
October 30, 2010
Hi,

dmd v2.050 give the following error:

hello.d(10): Error: undefined identifier module hello.dup

for the following code (hello.d):
---------------------
import std.stdio;
import std.array;
import std.string;

void main()
{
  uint[string] s;
  s["a"]=1;
  s["b"]=2;
  uint[string] r = s.dup;
  r["b"]=3;
  writeln(r["b"]," ",s["b"]);
}
---------------------

Could anyone explain why should this be an error?

Thanks!
thanate
October 30, 2010
On Saturday 30 October 2010 12:12:48 thanate wrote:
> Hi,
> 
> dmd v2.050 give the following error:
> 
> hello.d(10): Error: undefined identifier module hello.dup
> 
> for the following code (hello.d):
> ---------------------
> import std.stdio;
> import std.array;
> import std.string;
> 
> void main()
> {
>   uint[string] s;
>   s["a"]=1;
>   s["b"]=2;
>   uint[string] r = s.dup;
>   r["b"]=3;
>   writeln(r["b"]," ",s["b"]);
> }
> ---------------------
> 
> Could anyone explain why should this be an error?
> 
> Thanks!
> thanate

Easy. s is an associate array, not an array, and for whatever reason, associative arrays don't have a dup property: http://www.digitalmars.com/d/2.0/hash-map.html

I believe that if you want a deep copy, you're going to have to create a new one and then copy all of the elements over in a loop.

- Jonathan M Davis
October 30, 2010
This does seem like a strange omission. But thanks for the answer!

thanate
October 30, 2010
thanate:

> This does seem like a strange omission. But thanks for the answer!

Indeed, some methods are missing in the built-in associative arrays. I think Andrei likes the idea of adding few more methods (dup too) to those AAs, but no one has found the time to implement them yet.

Bye,
bearophile