Dot Product Thoughts

Brian Goetz brian.goetz at oracle.com
Fri Apr 19 05:41:04 PDT 2013


No, because then you're overloading integer sum and long sum, which 
invites overload selection / inference issues with:

   foo(Operators::sum)

and both

   (int, int) -> int
   (long, long) -> long

may be acceptable candidates.

Methods specifically designed to be used as method refs should not be 
overloaded.

Inference is great.  Overloading is great.  But overloading and 
inference are pulling in opposite directions; much of the time we can 
still deliver a good result, but that doesn't mean we should design 
libraries that make inference failure more likely.  (Many languages that 
are heavily based on type inference don't have overloading for this 
reason, except on arity.)

On 4/19/2013 6:39 AM, Stephen Colebourne wrote:
> On 19 April 2013 01:42, Brian Goetz <brian.goetz at oracle.com> wrote:
>>>>      Sensible would be the ability to express all built-in operators as
>>>>      functions so they can be used as reducers.
>>>
>>> I'm a bit confused: are you describing a language change that would
>>> allow any operator to be used as a function, or adding more static
>>> overloads to primitive classes and Strings?
>>
>> Just more static methods in classes like Integer.
>
> Maybe instead of:
> Integer::opSum
> Integer::opMultiply
>
> It could be:
> Opertators::sum
> Opertators::multiply
>
> Just a thought
> Stephen
>


More information about the lambda-dev mailing list