Associative arrays - non-intuitive 'in' semantics

Ben Davis entheh at cantab.net
Fri Feb 17 18:47:23 PST 2012


Same example as in the other message:

Chunk[][char[4]] chunks;
chunks["DATA"]~=new Chunk();
if ("DATA" !in chunks) throw new Exception("No DATA chunk");

The exception is thrown. Changing it as follows fixes it:

if (cast(char[4])"DATA" !in chunks) throw new Exception("No DATA chunk");

I can sort of maybe see why this happens, but it is a bit unfortunate. 
As in, my guess is that it's for the same reason HashMap.get() in Java 
accepts Object instead of the key type: because you might want to pass a 
List when the HashMap contains ArrayLists, for example. But the number 
of times I've wanted to do that is far fewer than the number of times 
I've been stung by accidentally passing the wrong object. Should 'in' 
perhaps implicitly cast the LHS to the key type of the RHS?

Maybe best of both worlds is possible: the LHS is implicitly cast if an 
implicit conversion exists, but it's still allowed if not?

Discuss :)


More information about the Digitalmars-d mailing list