D 2.0: Аргументы класса и определения объявлений с новым?

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

НовоеВыражение:

NewArguments ClassArguments BaseClasslistopt { DeclDefs } 

Аргументы класса:

class ( ArgumentList )

class ( )

class

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


person user541686    schedule 01.05.2011    source источник


Ответы (1)


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);
}
person kennytm    schedule 01.05.2011
comment
Вау, это очень интересно... могу я спросить, где вы это нашли? Я облазил весь сайт D, но не смог найти! - person user541686; 02.05.2011