Flutter Dart:forEach方法参数接受void,但即使返回int也有效
在Flutter Dart:forEach方法参数接受void,但即使返回int也有效,flutter,dart,Flutter,Dart,在iterable.dart文件中,forEach的代码是: void forEach(void f(E element)) { for (E element in this) f(element); } 您可以看到,forEach参数接受一个方法,其返回类型应该是void,但下面的代码工作正常,没有任何错误: var list = [1, 2, 3]; list.forEach((item) { print(item); return true; // should show a
iterable.dart
文件中,forEach
的代码是:
void forEach(void f(E element)) {
for (E element in this) f(element);
}
您可以看到,forEach
参数接受一个方法,其返回类型应该是void
,但下面的代码工作正常,没有任何错误:
var list = [1, 2, 3];
list.forEach((item) {
print(item);
return true; // should show an error
});
我认为在dart中,当您将void返回类型与函数一起使用时,返回类型可以是void或其他任何类型 例如:
main()=>print(function() as int); // the output is 12
void function()=>12;
在本例中,void函数返回一个值
例2:
class Super {
void function(){}
}
class Child extends Super{
@override
int function(){
return 10;
}
您可以重写具有void类型的函数,并将该函数的类型更改为任何其他类型。传递给
forEach()
的回调将被推断为bool函数(int)
,而List.forEach()
需要void函数(int)
。这是可以接受的,因为T Function()
被认为是void Function()
的一个子类型T Function()
可以在任何使用void Function()
的地方替换。再次感谢,先生,但是void f(){return true;}
显示错误怎么办?根据您的最后一行,void Function()
始终可以用T Function()
替换,因此我的代码不应该有任何错误。void f(){return true;}
不是用T Function()
替换void Function()
。它声明了一个void函数()
,分析器可以看到void函数()
试图返回一个值。这不同于执行void Function()f=(){return true;}代码>。我认为,因为你可以拥有更多的灵活性,而且不会造成伤害