2015-12-02 15:03 GMT+01:00 Ben Coman <[email protected]>:

> On Wed, Dec 2, 2015 at 12:38 AM, Tudor Girba <[email protected]> wrote:
> > Hi,
> >
> >> On Dec 1, 2015, at 5:13 PM, Max Leske <[email protected]> wrote:
> >>
> >> @Doru
> >> You’re missing the point: #anyOne *fails* for empty collections.
> >
> > I am not missing the point at all. I am saying that if you want sum: to
> be generic, it cannot assume a specific Zero object.
> >
> > And sum: should be generic because of its name.
>
> I am missing understanding the other use cases.  Can you describe
> further the generic nature of #sum & #sum: ?  I would have thought by
> default they only applied to numbers.
>

sum can be applied to anything that supports #+, not only numbers
sum: can be applied to any collection with a block that return some object
that supports #+

therefore you can not assume 0 (<- a number) is a proper initial value
therefore you *need* to work with #anyOne
and as you can not assume a proper initial value, you can not assume a
default value for empty collections
-> it should throw an error. If you (the caller of the function) knows what
to do with an empty collection you have
to check, or call inject:into: directly, with a proper initial value.


>
> cheers -ben
>
> >
> >>> On 01 Dec 2015, at 15:31, Esteban A. Maringolo <[email protected]>
> wrote:
> >>>
> >>> I don't want to be heretic (or too orthodox), but why not to delegate
> >>> this behavior to other class (an iterator maybe?).
> >>>
> >>> It's too tempting adding these convenience methods to Collection
> >>> and/or subclasses, but anything that requires an explicit protocol of
> >>> its elements is wrong, IMO.
> >>>
> >>> something like aCollection arithmetic sum: [...] or.... aCollection
> >>> arithmetic avg.
> >>
> >>
> >> Interesting thought!
> >
> > +100
> >
> > Doru
> >
> >>>
> >>> My two cents for this.
> >>>
> >>> Regards!
> >>>
> >>>
> >>> Esteban A. Maringolo
> >>>
> >>
> >>
> >
> > --
> > www.tudorgirba.com
> >
> > "Every thing has its own flow."
> >
> >
> >
> >
> >
>
>

Reply via email to