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

发布于 2024-11-04 02:59:17 字数 415 浏览 0 评论 0原文

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

新表达式:

NewArguments ClassArguments BaseClasslistopt { DeclDefs } 

类参数:

类(参数列表)

班级 ( )

班级

这些 ClassArguments 和 DeclDef 到底是什么?有没有一个例子可以展示它们的用途?

I just took a look at the Expressions grammar for D 2.0 (NewExpression) and something caught my attention:

NewExpression:

NewArguments ClassArguments BaseClasslistopt { DeclDefs } 

ClassArguments:

class ( ArgumentList )

class ( )

class

What exactly are these ClassArguments and DeclDefs? Is there an example somewhere that demonstrates their use?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

说谎友 2024-11-11 02:59:17

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

ClassArguments is the keyword class followed by the constructor arguments. DeclDefs are the declarations inside the class.


This syntax is to create an instance of an anonymous nested class, e.g.

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

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

The above can be rewritten into the less obscure form

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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文