> On 02 Dec 2015, at 15:21, Nicolai Hess <[email protected]> wrote:
> 
> 
> 
> 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.

I am sorry but I am getting really tired of this, you should read what is being 
said.

I am not suggesting to stop using #anyOne because I like why it is there and 
what it can do.

The change I want is what happens with an empty collection when using the 
simplest selector, #sum.

I do not want to say to some collection of numbers #sumIfEmpty: [0], because 
summing numbers starting from zero is the most common case and everybody 
expects that, hence the unary selector fits.

I want the less common cases to use the more complicated API, as in some 
collection of colors #sumIfEmpty: [ Color black ]

In my book that is common sense API design.

Doing that I do no take anything away, because today you already have to make 
sure the collection is not empty.

The only change would be in the error behaviour. I think that is a reasonable 
price to pay. Instead of having #anyOne fail, it will say that #+ cannot add 0 
to some object, and in a comment we can point to the alternative API.

http://izquotes.com/quote/242740 right ?

> 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