Suggestion: Change precedence of 'new'
Jason House
jason.james.house at gmail.com
Thu Apr 10 13:30:59 PDT 2008
Robert Fraser Wrote:
> Jason House wrote:
> > Bill Baxter Wrote:
> >
> >> Robert Fraser wrote:
> >>> Unknown W. Brackets wrote:
> >>>> I think the problem is in supporting this syntax:
> >>>>
> >>>> auto x = new package.module.Class;
> >>> The argument (as far as I can tell) is that it would be supported only
> >>> if trailing parentheses were supplied, so that expression would have to
> >>> be written as "new package.module.Class().propertyMethod;".
> >> That makes sense. So the rule would be that 'new' munches all the
> >> dot-separated identifiers to its right till it hits something besides a
> >> dot or an identifier.
> >>
> >> Here's another one from actual D code ported from Java:
> >>
> >> (new class Runnable {
> >> public void run() {
> >> if (canvas.isDisposed()) return;
> >> render();
> >> canvas.swapBuffers();
> >> canvas.getDisplay().timerExec(15, this);
> >> }
> >> }).run();
> >>
> >> In Java the parens around that whole mess aren't necessary.
> >>
> >> --bb
> >
> >
> > Why would anyone write code like that in D? First of all a delegate works just as well as a class with one member. Second, if this is simply run like a blocking function call, why not define a nested function and just call it?
> >
> > PS: I'm not trying to knock down your feature request. I just find the example strange. I'm sure there's more useful examples available and you just picked one at random.
>
> Okay, how about this (admittedly contrived) example?
>
> public abstract class A
> {
> public final int foo()
> {
> // do stuff
> bar();
> // do more stuff & return something
> }
>
> protected abstract void bar();
> }
>
> void baz()
> {
> int k = new class A
> {
> protected void bar()
> {
> // ...
> }
> }.foo();
> }
Actually, I meant in the context of the original proposal new foo().bar
More information about the Digitalmars-d
mailing list