develooper Front page | perl.perl6.language | Postings from February 2005

Re: Valid hash keys?

Thread Previous | Thread Next
From:
Nigel Sandever
Date:
February 27, 2005 04:19
Subject:
Re: Valid hash keys?
Message ID:
1103_1109506760@nntp.perl.org
On Sun, 27 Feb 2005 02:20:59 -0700, luke@luqui.org (Luke Palmer) wrote:
> Luke Palmer writes:
> > Autrijus Tang writes:
> > > Just a quick question: Is Hash keys still Strings, or can they be
> > > arbitary values? 
> > 
> > They can be declared to be arbitrary:
> > 
> >     my %hash is shape(Any);
> > 
> > 
> > > If the latter, can Int 2, Num 2.0 and Str "2" point to different
> > > values?
> > 
> > That's an interesting question.  Some people would want them to, and
> > some people would definitely not want them to.  I think the general
> > consensus is that people would not want them to be different, since in
> > the rest of perl, 2 and "2" are the same.
> 
> I forgot an important concretity.  Hashes should compare based on the
> generic "equal" operator, which knows how to compare apples and apples,
> and oranges and oranges, and occasionally a red orange to an apple.
> 
> That is:
> 
>     3 equal 3              ==> true
>     3 equal { codeblock }  ==> false
>     3 equal "3"            ==> true
> 

I would have assumed a hash who shape was defined as C<Int> to perform the 
hashing function directly on the (nominally 32-bit) binary representation Int 2. 

Likewise, c<my % hash is shape(Double)>, would perform the hashing on the binary 
rep of the (nom.64-bit) Double value.

And C<my %hash is shape(Ref)>, on the address of the key passed?

By extension, a C<%hash is shape( Any )> would hash the binary representation of 
whatever (type of) key it was given, which would make keys of 2, 2.0, '2', 
'2.0', (Int2)2 etc. all map to different keys.

If C<%hash is shape(Any)> maps all the above representation of 2 to the same 
value, then C<my %hash is shape(Any)> becomes a synonym for 

C<%hash is shape(Scalar)>.

(is that the same as C<my %hash of Scalar>?).

If my auumption is correct, then that would imply that each type hash or 
inherits a .binary or .raw method to allow access to the internal 
representation?

> Luke
 



Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About