Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter Dart:forEach方法参数接受void,但即使返回int也有效_Flutter_Dart - Fatal编程技术网

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;}。我认为,因为你可以拥有更多的灵活性,而且不会造成伤害