hash method
Andreas Raab
andreas.raab at gmx.de
Fri Jul 1 09:18:20 UTC 2005
Hi -
The only requirement for a hash method is that it needs to compute the
same values for objects which are considered equal via #=. Other than
that there is no requirement - in fact, a perfectly valid hash function
would be:
hash
^0
Albeit horribly slow (since it creates hash collisions everywhere) it
would be perfectly valid hash function. An invalid hash function would
(for example) be:
MyPoint>>= aPoint
"Only compare x values"
^x = aPoint x
MyPoint>>hash
^y
Since the y value could be different for points that have equal x values
and are therefore considered equal. And since you are asking about
patterns - a classic pattern is to take the hash values of the objects
that define equality and combine those via an appropriate operator, e.g.,
MyPoint>>= aPoint
"Compare x and y"
^x = aPoint x and:[y = aPoint y]
MyPoint>>hash
"Hash x and y"
^x hash bitXor: y hash
Cheers,
- Andreas
Houssam Fakih wrote:
> Hi,
>
>
>
> When I redefine the = operation for a class I should redefine its hash
> method.
>
> My question is about the definition of the hash method. I read that the
> method must return a SmallInteger whose value is related to the
> receiver. I would like to know if there is a general pattern adopted in
> Squeak for that. I get a look in the Squeak classes but it doesn’t help.
>
>
>
> Thanks,
>
> Houssam
>
> **____**
>
> **"Le paradis touche les pieds des mères..."**
>
> **>>> http://csl.ensm-douai.fr/fakih**
>
>
>
>
> ------------------------------------------------------------------------
>
>
More information about the Squeak-dev
mailing list
|