D 2.0: Аргументы класса и определения декларации с «новым»? - PullRequest
5 голосов
/ 01 мая 2011

Я только что взглянул на грамматику выражений для D 2.0 ( NewExpression ) и кое-что привлекло мое внимание:

значение ВыраженияNew:

NewArguments ClassArguments BaseClasslistopt { DeclDefs } 

ClassArguments:

class ( ArgumentList )

class ( )

class

Что это за ClassArguments и DeclDefs ? Есть ли где-нибудь пример, демонстрирующий их использование?

1 Ответ

6 голосов
/ 01 мая 2011

ClassArguments - ключевое слово class, за которым следуют аргументы конструктора. 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);
    }
  };
}

(См. 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);
}
...