Equality and hash

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Equality and hash

dario trussardi
Ciao,

        i works with Pharo 4.0 environment.

        I have a class Product  with some instance variable and the =   method set to:

        = anItem

        anItem ifNil:[^false].
       
        anItem class = self class ifFalse:[ ^false].
       
        ^  rfrConsegna  = anItem rfrConsegna
                                and:[ rfrSubTable  = anItem rfrSubTable
                                        and:[ rfrDcm = anItem rfrDcm
                                                and:[ indexRiga = anItem indexRiga
                                                        and:[ referenceTime = anItem referenceTime
                                                                and:[ consumer = anItem consumer
                                                                        and:[ item = anItem item
                                                                                and:[ opzioniVoce  = anItem opzioniVoce
                                                                ]]]]]]]
       
        Some of these variables are instances  of classes with specific implementation and some variables themselves.


        I set the relative hash method to:

        hash
       
        ^ rfrConsegna hash
                bitXor:( rfrSubTable  hash
                        bitXor: ( rfrDcm hash
                                bitXor: ( indexRiga hash
                                        bitXor: ( referenceTime hash
                                                bitXor: ( consumer   hash
                                                        bitXor: ( item   hash
                                                                bitXor: ( opzioniVoce  hash
                                               
                                )))))))

        Now when add some setup instances of class Product  to a bag,

                 the relative inspector report

                some aProduct entry but with some Occurences of this set to 0.

                aProduct1 3
                aProduct2 0
                aProduct3 0


        Some consideration about it ?

        Some references about hash implementations ?

        Thanks,

                Dario

       
Reply | Threaded
Open this post in threaded view
|

Re: Equality and hash

Denis Kudriashov
There is refactoring which sadly not available from menu. But you can evaluate it manually:

(RBGenerateEqualHashRefactoring className: #YourClass variables: #(var1 var2)) execute

2017-02-20 13:46 GMT+01:00 Trussardi Dario Romano <[hidden email]>:
Ciao,

        i works with Pharo 4.0 environment.

        I have a class Product  with some instance variable and the      =      method set to:

        = anItem

        anItem ifNil:[^false].

        anItem class = self class ifFalse:[ ^false].

        ^  rfrConsegna  = anItem rfrConsegna
                                and:[ rfrSubTable  = anItem rfrSubTable
                                        and:[ rfrDcm = anItem rfrDcm
                                                and:[ indexRiga = anItem indexRiga
                                                        and:[ referenceTime = anItem referenceTime
                                                                and:[ consumer = anItem consumer
                                                                        and:[ item = anItem item
                                                                                and:[ opzioniVoce  = anItem opzioniVoce
                                                                ]]]]]]]

        Some of these variables are instances  of classes with specific implementation and some variables themselves.


        I set the relative hash method to:

        hash

        ^ rfrConsegna hash
                bitXor:( rfrSubTable  hash
                        bitXor: ( rfrDcm hash
                                bitXor: ( indexRiga hash
                                        bitXor: ( referenceTime hash
                                                bitXor: ( consumer   hash
                                                        bitXor: ( item   hash
                                                                bitXor: ( opzioniVoce  hash

                                )))))))

        Now when add some setup instances of class Product  to a bag,

                 the relative inspector report

                some aProduct entry but with some Occurences of this set to 0.

                aProduct1       3
                aProduct2       0
                aProduct3       0


        Some consideration about it ?

        Some references about hash implementations ?

        Thanks,

                Dario



Reply | Threaded
Open this post in threaded view
|

Re: Equality and hash

dario trussardi
Thanks Denis. 

There is refactoring which sadly not available from menu. But you can evaluate it manually:

(RBGenerateEqualHashRefactoring className: #YourClass variables: #(var1 var2)) execute

My problem is display in this image.

In the left the inspector display all the items in the bag ( it's right )

In the right the inspector display the relative  Occurences,    but some are set to 0.
 



Because ?

Thanks for considerations,

Dario

2017-02-20 13:46 GMT+01:00 Trussardi Dario Romano <[hidden email]>:
Ciao,

        i works with Pharo 4.0 environment.

        I have a class Product  with some instance variable and the      =      method set to:

        = anItem

        anItem ifNil:[^false].

        anItem class = self class ifFalse:[ ^false].

        ^  rfrConsegna  = anItem rfrConsegna
                                and:[ rfrSubTable  = anItem rfrSubTable
                                        and:[ rfrDcm = anItem rfrDcm
                                                and:[ indexRiga = anItem indexRiga
                                                        and:[ referenceTime = anItem referenceTime
                                                                and:[ consumer = anItem consumer
                                                                        and:[ item = anItem item
                                                                                and:[ opzioniVoce  = anItem opzioniVoce
                                                                ]]]]]]]

        Some of these variables are instances  of classes with specific implementation and some variables themselves.


        I set the relative hash method to:

        hash

        ^ rfrConsegna hash
                bitXor:( rfrSubTable  hash
                        bitXor: ( rfrDcm hash
                                bitXor: ( indexRiga hash
                                        bitXor: ( referenceTime hash
                                                bitXor: ( consumer   hash
                                                        bitXor: ( item   hash
                                                                bitXor: ( opzioniVoce  hash

                                )))))))

        Now when add some setup instances of class Product  to a bag,

                 the relative inspector report

                some aProduct entry but with some Occurences of this set to 0.

                aProduct1       3
                aProduct2       0
                aProduct3       0


        Some consideration about it ?

        Some references about hash implementations ?

        Thanks,

                Dario