Hi Sean, This is a complex question. Essentially, this is the difference between a plain normal class and an abstract data type. Abstract data type will typically override hash and = to give the ability to structurally compare them.
From my rather long experience in programming, I do not remember to have overriding = and hash, even once. This is error prone and not justified. Also, if you have two different objects that are equals, then it often leads to complex situation to debug (Have you ever used âTranscript show: my object hash asStringâ?).
In your case of Person, I guess each person has to have a unique Id (social number?). This is how I would solve this. Cheers, Alexandre On Oct 2, 2014, at 4:41 PM, Sean P. DeNigris <sean@clipperadams.com> wrote:
I've read that #= can ignore non-domain things like cache data, but what about domain-related things that do not effect identity?
Let's say I have a Person class. Obviously, the #name would be compared in #=. But what if there was a collection of #phoneNumbers, and aPerson and anotherPerson differed only in that one of them had been updated with an extra #phoneNumber? Should #= answer true or false? I'm guessing true since e.g. in a unique collection there should only be one of that particular person. Then there would have to be another message like #exactlyTheSameAs:. Is there a well-known pattern distinguishing "Conceptually the same as" from "exactly the same as, but not #=="?
Thanks.
----- Cheers, Sean -- View this message in context: http://forum.world.st/Conceptually-the-same-as-in-Smalltalk-tp4782118.html Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.