2009/12/24 <[email protected]>: > Igor, > > Sometimes a fallacy can be written by clever people, by accident. > > If you pay attention to the line: > > (size := self size) = otherCollection size ifFalse: [^false]. > > I all Smalltalks [Except Pharo to what I wrote a comment in issue 1637 > http://code.google.com/p/pharo/issues/detail?id=1637] this would return false > if self be not Collection or otheCollection isKindOf: Collection not. > > This happens because in these Smalltalks Object>>size returns zero. >
Not so sure. Try 1.0 size, then 1.0 at: 1.0 size in you favourite dialect. Nicolas > In Squeak where the method is implemented slightly different, an > UndefinedObject>>size does return the zero for nil Objects but will raise an > error for non indexable objects. > > So except if we are willing to have a very specific dialect of Smalltalk in > Pharo, we'll probably have to fix the protocol for Object>>size, and then the > line above will for most of the cases automatically return false as soon > otherCollection happen to be isKindOf: Collection not. > > OTOH, if we keep Pharo as is, the above line will also by the automatism > already described give the MNU as an error. . . > > -- > Cesar Rabak > > Em 23/12/2009 20:22, Igor Stasenko <[email protected]> escreveu: > > > Eliot is right: the argument of isSameSequenceAs: should be already of > SequenceableCollection kind , > otherwise there is no sense asking , whether some collection has same > sequence as another one, which probably not sequencable. > > By analogy, asking 'isSameColor: anObject' , we already stating, that > an argument - anObject having a #color property. > Otherwise, if its not, this should lead to error, but not returning 'false'. > > > 2009/12/23 Eliot Miranda : >> >> >> On Wed, Dec 23, 2009 at 10:41 AM, wrote: >>> >>> Em 23/12/2009 16:10, Eliot Miranda < [email protected] > escreveu: >>> >>> > >>> > Core.SequenceableCollection comparing >>> > isSameSequenceAs: otherCollection >>> > >>> > "Answer whether the receiver's size is the same as otherCollection's >>> > size, and each of the receiver's elements equal the corresponding >>> > element of otherCollection." >>> > >>> > | size | >>> > (size := self size) = otherCollection size ifFalse: [^false]. >>> > 1 to: size do: [:index | >>> > (self at: index) = (otherCollection at: index) ifFalse: [^false]]. >>> > ^true >>> > >>> > i.e. trust the caller is providing a sequence and if >>> > otherCollection doesn't implement at: there will be a run-time >>> > error, hence any otherCollection isKindOf: SequenceableCollection is >>> > just wasted cycles. >>> > >>> >>> I don't think that "trusting the caller" makes sense in this case, so >>> I propose instead that you implementation be complemented by: >>> >>> Object>>isSameSequenceAs: otherCollection >>> ^false >> >> We're talking about the argument otherCollection not the receiver. i.e. >> leaving out isKindOf: in >> isSameSequenceAs: otherCollection >> "Answer whether the receiver's size is the same as >> otherCollection's size, and each >> of the receiver's elements equal the corresponding element of >> otherCollection." >> >> | size | >> (otherCollection isKindOf: SequenceableCollection) ifFalse: >> [^false]. "this is a horrible wart" >> (size := self size) = otherCollection size ifFalse: [^false]. >> 1 to: size do: [:index | >> (self at: index) = (otherCollection at: index) ifFalse: >> [^false]]. >> ^true >> You could use double dispatching: >> SequenceableCollection>>isSameSequenceAs: otherThing >> ^otherThing isSameSequenceAsSequence: self >> SequenceableCollection>> isSameSequenceAsSequence: aSequenceableCollection >> aSequenceableCollection size ~= self size ifTrue: [^false]. >> etc >> Object isSameSequenceAsSequence: aSequenceableCollection >> ^false >> but I think in this case it's overkill. >>> >>> -- >>> Cesar Rabak >>> >>> _______________________________________________ >>> Pharo-project mailing list >>> [email protected] >>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> >> >> _______________________________________________ >> Pharo-project mailing list >> [email protected] >> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> > > > > -- > Best regards, > Igor Stasenko AKA sig. > > _______________________________________________ > Pharo-project mailing list > [email protected] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > > _______________________________________________ > Pharo-project mailing list > [email protected] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project _______________________________________________ Pharo-project mailing list [email protected] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
