D 2.0:带有"新"的类参数和声明定义?

Meh*_*dad 5 syntax expression d

我刚看了D 2.0(NewExpression)的表达式语法,引起了我的注意:

NewExpression:

NewArguments ClassArguments BaseClasslistopt { DeclDefs } 
Run Code Online (Sandbox Code Playgroud)

ClassArguments:

class ( ArgumentList )

class ( )

class
Run Code Online (Sandbox Code Playgroud)

究竟是什么这些ClassArguments多个声明定义?是否有某个示例证明了它们的用途?

ken*_*ytm 6

ClassArgumentsclass构造函数参数后跟的关键字.DeclDefs是类中的声明.


此语法用于创建匿名嵌套类的实例,例如

import std.stdio;

void main() {
  class K {
    this() { writeln("K.__ctor"); }
  }

  auto f = new class (1, "4", 7.0) K {
    this(int a, string b, double c) {
      super();
      writefln("anon.__ctor: %s %s %s", a, b, c);
    }
  };
}
Run Code Online (Sandbox Code Playgroud)

(见http://ideone.com/cA1qo.)

以上内容可以改写成不那么模糊的形式

import std.stdio;

void main() {
  class K {
    this() { writeln("K.__ctor"); }
  }

  class AnonymousClass : K {
    this(int a, string b, double c) {
      super();
      writefln("anon.__ctor: %s %s %s", a, b, c);
    }
  }
  auto f = new AnonymousClass(1, "4", 7.0);
}
Run Code Online (Sandbox Code Playgroud)