On Wed, Sep 3, 2014 at 7:54 AM, Thierry Goubier <[email protected]> wrote:
> > > > 2014-09-03 14:40 GMT+02:00 Marcus Denker <[email protected]>: > > with:do: on SequencableCollection checks that both collections have the >> same size (it raises an Error if not). >> >> with: otherCollection do: twoArgBlock >> "Evaluate twoArgBlock with corresponding elements from this >> collection and otherCollection." >> otherCollection size = self size ifFalse: [self error: >> 'otherCollection must be the same size']. >> 1 to: self size do: >> [:index | >> twoArgBlock value: (self at: index) >> value: (otherCollection at: index)] >> >> I think we should not do that: >> >> 1) it is slow >> > > Are you sure about that one? The check is a constant cost disregarding the > collection length, and, anyway, self size is reused just after that. > > >> 2) when the other is larger, is would work and just omit the rest > > 3) if it is smaller, you will get an error anyway >> > > I have a feeling I'm not in Pharo anymore, but in R instead ;) > +2. There are clear safety advantages in the check. If you want the "faster" protocol why not define withSomeOf:do: or some such? > Thierry > > >> >> There are just three methods doing such a size check: >> >> with:do: >> with:collect: >> reverseWith:do: >> (the last one actually raises a SizeMismatch exception, it is the >> sole user of that exception) >> >> Is there a reason why this makes sense? >> >> I added an issue with a slice to clean it up: >> >> >> https://pharo.fogbugz.com/f/cases/13946/speed-up-with-do-by-not-checking-size >> >> Marcus >> >> >> >> >> >> > -- best, Eliot
