有什么区别
void test1(void fun(String element)) {
fun("Test1");
}
//AND
void test2(Function(String element) fun) {
fun("Test2");
}
我试图同时运行它们两者,但在输出中找不到任何差异:
void main() {
test1((test) => print(test));
test2((test) => print(test));
}
void test1(void fun(String element)) {
fun("Test1");
}
void test2(Function(String element) fun) {
fun("Test2");
}
// Output:
// Test1
// Test2
我是Dart的新手,所以我一直都在使用Java,所以将函数传递给函数对我来说是新事物,因此,如果有人可以向我解释以上代码的不同之处,将不胜感激。
答案 0 :(得分:5)
使用名称之前的函数类型声明函数参数(void Function(String) fun
或使用名称类似中间名称({{ 1}})。两者都声明了一个类型为void fun(String element)
的名为fun
的参数。
Dart最初没有办法内联地编写函数类型,必须使用typedef,因此大多数较旧的代码都使用void Function(String)
表示法。引入void fun(String element)
表示法(因为需要指定泛型函数类型)时,使用类型首先写入函数类型的参数变得更加容易。
两者都被使用,都不是惯用的,使用您认为最适合的方式。
值得记住的两种格式之间有一个区别:
returnType Function(arguments)
表示法要求函数参数的名称。如果您编写void fun(String element)
,它将被解释为一个函数,该函数采用名称为void fun(String)
的类型为dynamic
的一个参数。String
表示形式假定单个参数名称是类型。我个人更喜欢原始的函数参数格式,除了必须编写参数名称。