【问题标题】:dart const static fields飞镖常量静态字段
【发布时间】:2013-06-08 14:56:17
【问题描述】:

我正在阅读关于 SO 的this answer,我想知道为什么这些字段被显式声明为静态和常量。 Dart 中的 const 字段是编译时间常量吗?如果是这样,这是否意味着它们是隐式静态的?

【问题讨论】:

    标签: static constants dart


    【解决方案1】:

    理论上,您可以更改 Dart,使 const 修饰符隐含 static。这是一个有效的提议,并得到了积极的讨论。

    我们更喜欢明确要求 static 的原因有两个:

    • 它更清楚地说明了如何访问这些变量(与任何其他静态变量一样)。
    • 我们可能想使用实例const 来表示不同的含义。目前,const 实例字段严格等同于final 字段。但是,它们不需要。例如,您可以更改 Dart 规范以允许访问 const 实例字段作为常量表达式的一部分。 (目前不允许访问const字段右侧的字段。)

    作为第二点的例子。假设你有:

    class Point { 
      final int x; 
      final int y; 
      const Point(this.x, this.y);
    }
    const origin = Point(0, 0);
    

    目前,你不能写:

    const origin_x = origin.x;
    

    可以更改规范以允许对常量对象的字段进行常量访问,但这会阻碍 const 类的发展。 例如,将字段更改为 getter 会突然变成重大更改。

    const 提案标记了这些字段,因此允许在 const 上下文中访问它们。同时,该课程的作者知道更改字段(例如更改为 getter)将是一项重大更改。

    class Point { 
      const int x; 
      const int y; 
      const Point(this.x, this.y);
    }
    const origin = Point(0, 0);
    const origin_x = origin.x;  // Now allowed.
    

    【讨论】:

    • 您能否提供一个例子来支持您的第二点?
    • 我已经不在 Dart 团队了,我不确定这个提议是否仍然被考虑。但是,我用示例更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多