[squeak-dev] What is equivalence? (was: The Trunk:
asqueaker at gmail.com
Wed Feb 4 20:40:25 UTC 2015
On Wed, Feb 4, 2015 at 1:12 PM, Chris Muller <ma.chris.m at gmail.com> wrote:
>> On Wed, Feb 4, 2015 at 9:07 AM, Chris Muller <asqueaker at gmail.com> wrote:
>>> isSequenceable is a term that refers to a particular *kind* of
>>> Collection, a sequenceable one.
>>> Therefore, IMO, I am unable to think of any more clear and explicit
>>> way of expressing that than "isKindOf: SequenceableCollection"...
>> self isCollection and: [self isSequenceable] is better. isKinfOf: is a)
>> not object-oriented as it forces an argument to be in a particular hierarchy
>> rather than having a particular interface, and b) is horribly inefficient,
>> causing a potentially long search of an object's class hierarchy. isKindOf:
>> doesn't just smell, it stinks.
> Yes, and class-testing via #class as well, for the same reasons. But
> sometimes we really do want to know whether we have a _particular
> implementation_ of a Dictionary, not just dictionary behaviors and
Eliots subStrings: change is obviously a fine improvement and I think
the hasEqualElements: is too with one of Levente's suggestions. But
may we scrutinize this change to Dictionary>>#= just a bit more?
Everyone agrees using #isDictionary is faster and more OO and less
smelly than isKindOf: Dictionary.
If #isDictionary refers to particular API and behaviors, one could
argue that a BTree should answer true to #isDictionary, because it has
similar API and behaviors. In the context of _equivalence testing_
though, a BTree is not a Dictionary.
So as long as we interpret the various #isSomeType methods as truly of
*that type* (same semantics as isKindOf:), and not "similar to", then
I can see no side-effects (unless someone added #isDictionary to
BTree, of course). However, we may want to visit the other #=
implementations elsewhere in the system too, unless this would appear
to be an inconsistency producing its own odor of sorts.
More information about the Squeak-dev