Current State of Closures
Brian Goetz
brian.goetz at oracle.com
Wed Jul 28 14:46:31 PDT 2010
Yes, you're seeing denial in action.
On Jul 28, 2010, at 2:37 PM, Reinier Zwitserloot wrote:
> I keep seeing #returnType(paramTypes) mentioned, but doesn't SotL eliminate
> those entirely?
>
> --Reinier Zwitserloot
>
>
>
> On Tue, Jul 27, 2010 at 12:34 PM, Talden <talden at gmail.com> wrote:
>
>> On Tue, Jul 27, 2010 at 8:44 PM, Peter Levart <peter.levart at marand.si>
>> wrote:
>>> I didn't see that mentioned in the drafts. But with current prototype and
>> it's syntax using target typing with inferal of lambda's argument types, the
>> alternative is not so much longer and is more general, since you have the
>> control over argument positions:
>>>
>>> public class TestClosures
>>> {
>>> public static #Integer(Integer) partial(final #Integer(Integer, Integer)
>> func, final int arg1)
>>> {
>>> return #(arg2){ func.(arg1, arg2) };
>>> }
>>>
>>> public static void main(String[] args)
>>> {
>>> #Integer(Integer,Integer) pow = #(x, y){x * y};
>>> #Integer(Integer) part = partial(pow, 2);
>>> System.out.println(part.(2));
>>> }
>>> }
>>
>> I assume it would be possible to provide a nearly equivalent
>> genericised form (only nearly because you can't generically involve
>> the primitive).
>>
>> Something like this?
>>
>> public static <X, Y, Z> #Z(Y) curryFirst(final #Z(X, Y) func, final X arg1)
>> {
>> return #(arg2) { func.(arg1, arg2) };
>> }
>>
>> Such that you could say
>>
>> #Integer(Integer, Integer) adder = #(x, y) { x + y };
>> #Integer(Integer) plus10 = curryFirst(adder, 10);
>>
>> Do I have that right?
>>
>> Are these lambda type declarations still valid under the current state
>> of the lambda or are SAMs required instead now? I thought I saw
>> something about these declarations not being supported and the removal
>> of the "block.(...)" notation as well. A shame if that's the case.
>>
>> --
>> Aaron Scott-Boddendijk
>>
>>
>
More information about the lambda-dev
mailing list