Dan*_*ico 3 inference constants compiler-optimization dart flutter
我认为 dart 会使用const构造函数,如果它能够自动执行的话,为了解释这个假设,让我们假设我们有一个已经有const constructor类似的小部件:
class Retry extends StatelessWidget {
const Retry();
}
Run Code Online (Sandbox Code Playgroud)
然后因为 dart“能够推断 const 用法”,接下来的两个代码将意味着并被编译成相同的代码:
1.
Container(
child: Retry()
)
Run Code Online (Sandbox Code Playgroud)
Container(
child: const Retry()
)
Run Code Online (Sandbox Code Playgroud)
这是假设 dart 可以推断他必须使用const声明了该选项的类的构造函数吗?或者不是?我如何证实它?
不,Dart 编译器不会推断,const除非语法上下文需要 constness,例如,如果您将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);
}
Run Code Online (Sandbox Code Playgroud)
如果编译器只是进行const构造函数调用,那么该程序将打印1,但它应该打印2。