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

时间:2011-05-01 18:45:00

标签: syntax expression d

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

  

NewExpression:

NewArguments ClassArguments BaseClasslistopt { DeclDefs } 
     

ClassArguments:

class ( ArgumentList )

class ( )

class

这些 ClassArguments DeclDefs 究竟是什么?有没有一个例子可以证明它们的用途?

1 个答案:

答案 0 :(得分:6)

ClassArguments 是关键字class,后跟构造函数参数。 DeclDefs 是类中的声明。


此语法用于创建anonymous nested class的实例,例如

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);
    }
  };
}

(见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);
}