dart - Dart 2 中的 const 何时是可选的?
问题描述
在 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 对象 - 在 const 变量 (
const x = [1];
) 的初始化表达式中。 - 在 switch case 表达式 (
case Foo(2):...
) 中。
还有另外两个语言需要常量表达式的地方,但它们不会自动变为常量(出于各种原因):
- 可选参数默认值
const
具有构造函数的类中最终字段的初始化表达式
1 不是 const ,因为我们希望保留使这些表达式在将来不需要为 const 的选项。2 是因为它是一个非局部约束 -表达式周围没有任何内容表明它必须是 const,因此例如const
从构造函数中删除 而不注意到它改变了字段初始值设定项的行为太容易了。
推荐阅读
- anaconda - Anaconda Jypiter 无法启动,Spyder 报告错误
- c# - DNN DDR 模块 - 获取当前页面名称和描述
- r - 不能在 sapply 中使用survey_mean
- java - 在tomcat服务器中部署依赖应用
- javascript - javascript计算时如何绘制页面?
- asp.net - 如何在 sitecore 设置中添加 pdf 以获得 404 和 301 状态
- python - 根据具有数百万行的数据框中的匹配条件,更快地识别和比较行
- nginx - nginx 配置中的条件块显然不起作用
- android - Send get request in kotlin (Android )
- database - ArangoDB - 索引比拥有更多集合更好吗?