在 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]]
)。 @Foo(Bar())
)const x = [1];
) 的初始化表达式中。 case Foo(2):...
)。 语言还有另外两个地方需要常量表达式,但它们不会自动变为常量(出于各种原因):
const
的类中最终字段的初始化表达式构造函数1 不是 const 是因为我们希望保留将来使这些表达式不需要是 const 的选项。 2 是因为它是一个非局部约束——表达式周围没有任何东西表明它必须是 const,所以很容易,例如,删除
const
从构造函数没有注意到它改变了字段初始值设定项的行为。
关于dart - Dart 2 中的 const 何时是可选的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52581148/