Запуск следующего кода (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();
}
Что в алгоритме логического вывода Дарта заставляет эти случаи вести себя по-разному? Похоже, что типы функций foo
и bar
должны быть довольно легко вывести, так как они всегда возвращают одно и то же значение. Для меня также не очевидно, почему перемещение по сайту объявления функции изменит вывод типа в этих случаях.
Кто-нибудь знает, что здесь происходит?