我认为 dart 会使用const
构造函数(如果它能够自动完成),为了解释这个假设,让我们假设我们有一个小部件,它已经有一个const constructor
like:
class Retry extends StatelessWidget {
const Retry();
}
然后因为 dart“能够推断 const 用法”,接下来的两个代码将意味着并被编译成相同的代码:
1.
Container(
child: Retry()
)
-
Container(
child: const Retry()
)
这个假设是 dart 可以推断出他必须使用const
声明了该选项的类的构造函数?或者不是?
我如何证实它?
不,Dart 编译器不会推断const
除非句法上下文需要常量,例如如果你写const [A()]
这使得A()
进入 const 上下文,这意味着const [A()]
是相同的const [const A()]
,很少有其他地方同样适用(例如元数据@A()
).
一般来说 Dart 编译器无法推断const
在语言规范要求这样做的地方之外,因为它可能会改变程序的语义。考虑:
class A {
const A();
}
final Set<A> s = <A>{};
void foo(A a) {
s.add(a);
}
void main() {
foo(A());
foo(A());
print(s.length);
}
如果编译器只是到处放const
在构造函数调用时,该程序将打印1
,但是它应该打印2
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)