【发布时间】:2023-04-01 23:39:01
【问题描述】:
运行以下代码 (Dart 2.3) 会引发异常:
type 'List<dynamic>' is not a subtype of type 'List<bool>'
bar() => 0;
foo() => [bar()];
main() {
var l = [1, 2, 3];
l = foo();
}
但是,这个稍作改动的示例可以正常运行:
main() {
bar() => 0;
var l = [1, 2, 3];
l = [bar()];
}
这样:
main() {
bar() => 0;
foo() => [bar()];
var l = [1, 2, 3];
l = foo();
}
Dart 的类型推断算法使这些情况的行为不同的原因是什么?似乎函数 foo 和 bar 的类型应该很容易推断,因为它们总是返回相同的值。我也不清楚为什么在这些情况下移动函数声明的位置会改变类型推断。
有人知道这里发生了什么吗?
【问题讨论】:
标签: dart type-inference