Covariant overrides on the Buffer Hierachy
Peter Levart
peter.levart at gmail.com
Tue Apr 22 07:05:21 UTC 2014
On 04/22/2014 04:30 AM, Zhong Yu wrote:
> On Mon, Apr 21, 2014 at 7:07 AM, Ulf Zibis <Ulf.Zibis at cosoco.de> wrote:
>> So to me, this is clearly a language matter, not to solve by tricky
>> footprint and/or performance lasting code on APIs:
>> People want a _smart syntax_ for consecutive method invocations on the same
>> object, that's all!
> Amen to that!
>
> However I'm a little concerned with the mental effort a reader needs
> to figure out the implicit method receiver. I'd like to see more
> explicitness in establishing the implicit method receiver, something
> like Pascal's with statement.
>
> expr "."
> {
> // expr is the implicit receiver for this block
> foo(); // interpreted as expr.foo()
> }
>
> so that we could write
>
> CharBuffer.allocate(26).{position(2);put("C");position(25);put("Z");}
>
> string.{ mySub=subString(indexOf("C"), indexOf("Q")); }
>
> new HashMap<>().{ put(n1,v1); put(n2,v2); }
>
> new Button().{ color(red); text("hello"); onClick(event->color(blue)); }
>
Some questions about this syntax:
What is the type of :
new HashMap<>().{ put(n1,v1); put(n2,v2); }
is it an expression or a statement? It should be an expression,
otherwise it's not of much use. It should be possible to do:
Map<Integer, String> map = new HashMap<>().{ put(n1,v1); put(n2,v2); };
...but that looks very similar to an anonymous class syntax, doesn't it?
It actually behaves similarly to, for example:
Map<Integer, String> map = new HashMap<>() {{ put(n1,v1);
put(n2,v2); }};
I don't know if this is good or bad.
It certainly spawns all kinds of questions that were on the agenda for
lambda expressions, like:
- what's the meaning of "this" inside the .{ ... } block?
- what's the meaning of "break", "continue", "next", "return", .... (I
guess it should be the same as with the ordinary lexical block: { ... },
although it's rather unusual to be able to for example "break" out of a
loop inside the evaluation of an expression)
Regards, Peter
> Zhong Yu
More information about the core-libs-dev
mailing list