dart - Dart 2 中的 const 何时是可选的?

标签 dart dart-2

在 Dart Object() 构造函数中声明为 const,所以:

identical(const Object(), const Object()); //true

我知道在 Dart 2 中,关键字 const 是可选的,我认为前面的语句等效于:
identical(Object(), Object()); //false

但实际上它似乎相当于:
identical(new Object(), new Object()); //false

现在我的疑问是:

1) 什么时候 const 关键字是可选的?

2)有什么方法可以确保我的类的实例在没有 const 关键字的情况下始终保持不变?这样我就可以获得:
indentical(MyClass(), MyClass()); //true (is it possible?)

最佳答案

Dart 2 允许您省略 new到处。您曾经写过的任何地方 new ,您现在可以省略它。

Dart 2 还允许您省略 const在上下文暗示的位置。这些职位是:

  • 内部 const对象创建、映射或列表文字 ( const [1, [2, 3]] )。
  • 在元数据中创建 const 对象( @Foo(Bar()) )
  • 在 const 变量 ( const x = [1]; ) 的初始化表达式中。
  • 在 switch case 表达式中 ( case Foo(2):... )。

  • 语言还有另外两个地方需要常量表达式,但它们不会自动变为常量(出于各种原因):
  • 可选参数默认值
  • 带有 const 的类中最终字段的初始化表达式构造函数

  • 1 不是 const 是因为我们希望保留将来使这些表达式不需要是 const 的选项。 2 是因为它是一个非局部约束——表达式周围没有任何东西表明它必须是 const,所以很容易,例如,删除 const从构造函数没有注意到它改变了字段初始值设定项的行为。

    关于dart - Dart 2 中的 const 何时是可选的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52581148/

    相关文章:

    java - flutter 错误 : java. lang.NoSuchFieldError PREFER_HIGHEST_OR_REMOTE_VERSION_NO_FORCE_STAGING

    flutter - 我可以仅对一个小部件而不是整个页面使用 setState 吗?

    firebase - 在 flutter dart 应用程序中从 firebase 检索数据时遇到问题。无法获取 DocumentSnapshotPlatform 上不存在的字段

    android - Flutter Pie Chart labelAccessorFn无法正常工作

    android - Flutter NetworkImage 处理 403 错误

    dart - 空感知函数调用?

    android - 尝试使用 ButtonTheme 设置最小宽度时出错