For example, in Artefact we use Units and I have tried
to use sum but it
doesn't works because Units doesn't allow to do 0 + 4 cm which is
inconsistent.
2013/4/22 Alexandre Bergel <alexandre.bergel(a)me.com>
Thanks for letting us know. I cannot see a case
where having 0 as the
initial value does not work as expected.
Cheers,
Alexandre
Le 21 avr. 2013 à 17:35, Tudor Girba <tudor(a)tudorgirba.com> a écrit :
Hi,
Pharo 2.0 comes with Collection>>sum:
Collection>>sum: aBlock
"This is implemented using a variant of the normal inject:into:
pattern.
The reason for this is that it is not known
whether we're in the
normal
number line, i.e. whether 0 is a good initial
value for the sum.
Consider a collection of measurement objects, 0 would be the unitless
value and would not be appropriate to add with the unit-ed objects."
| sum sample |
sample := aBlock value: self anyOne.
sum := self inject: sample into: [ :previousValue :each |
previousValue +
(aBlock value: each) ].
^ sum - sample
To some extent, this is more generic than the one we had in Moose that
considered
only numbers:
Collection>>sum: aSymbolOrBlock
^ self
inject: 0
into: [:sum :each | sum + (aSymbolOrBlock value: each)]
However, with the Pharo 2.0 implementation the collection must not be
empty, while
the other implementation we get 0. If the collection is empty,
you get an exception due to anyOne.
This induced several errors in metric computations (like number of
methods of a
package when the package had no classes). These are now fixed,
but I thought I would let you know just in case you want to rely on this
method.
I actually still believe we would benefit from a robust but more
limited sum:.
Perhaps we could have sumNumbers:.
Cheers,
Doru
--
www.tudorgirba.com
"If you can't say why something is relevant,
it probably isn't."
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
--
*Guillaume Larcheveque*
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch