hashOf()

John Colvin via Digitalmars-d digitalmars-d at puremagic.com
Wed Nov 2 09:19:44 PDT 2016


On Wednesday, 2 November 2016 at 16:14:23 UTC, Márcio Martins 
wrote:
> There are 2 hashOf() definitions, one in object.d and one in 
> core.internal.hash.d
>
> If you include core.internal.hash, you cannot call hashOf() 
> anymore, because it conflicts with the implicit import in 
> object.d, this is annoying in itself...
> The bigger issue though, is that they have different semantics:
>
> import core.internal.hash : hashOfInt = hashOf;
>
> void main() {
>     string moo = "moo";
>     assert(moo.hashOfInt == moo.idup.hashOfInt); // ok - hashes 
> moo.ptr[0..moo.length]
>     assert(moo.hashOf == moo.idup.hashOf); // fail - hashes 
> &moo[0..moo.sizeof]
> }
>
> Did anyone else fall into this trap?

I think that "internal" means "for internal use", I.e. don't 
import and use it outside.

You could argue that object.hashOf should hash the contents of 
slices, not just the meta-data (i.e. length / ptr), but that's a 
separate matter.


More information about the Digitalmars-d mailing list