【问题标题】:Why does Dart have compile time constants?为什么 Dart 有编译时常量?
【发布时间】:2012-09-07 06:46:25
【问题描述】:

Dart 有编译时常量的概念。编译时常量在编译时被解析和创建,并被规范化。

例如,这里是 Point 的 const 构造函数:

class Point {
  final num x, y;
  const Point(this.x, this.y);
}

这是你如何使用它的:

main() {
  var p1 = const Point(0, 0);
  var p2 = const Point(0, 0);
  print(p1 == p2); // true
  print(p1 === p2); // true
}

这是一个不明显的功能,似乎与其他动态语言中的功能没有相似之处。 const 对象有一些限制,比如所有字段都必须是 final 的,并且必须有一个 const 构造函数。

为什么 Dart 有编译时常量?

【问题讨论】:

    标签: dart


    【解决方案1】:

    Lasse 的回答here 对我帮助很大

    那么,编译时常量到底有什么用处?

    • 它们对枚举很有用。
    • 您可以在切换情况下使用编译时常量值。
    • 它们用作注释。

    在 Dart 切换之前,编译时常量曾经更重要 懒惰地初始化变量。在此之前,您只能声明 一个已初始化的全局变量,例如“var x = foo;”如果“foo”是 编译时常量。如果没有这个要求,大多数程序都可以 不使用任何 const 对象编写

    【讨论】:

      【解决方案2】:

      来自mailing list,Florian Loitsch 写道:

      编译时常量的规范化属性很好,但是 不是拥有它们的主要原因。编译时的真正好处 常量是,它们不允许任意执行 构造,因此可以在我们不想要的地方使用 要执行的代码。例如,静态变量初始化器是 最初仅限于编译时常量以避免在 顶层。简而言之,他们确保程序以 'main' 而不是其他地方。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-25
        • 2012-10-19
        • 1970-01-01
        • 2011-10-14
        • 1970-01-01
        • 2012-08-31
        • 2014-02-10
        相关资源
        最近更新 更多