gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:30:12 24 4
gpt4 key购买 nike

在 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com