之间有什么区别
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,因此将函数传递给函数对我来说是新事物,因此,如果有人可以向我解释上述代码的不同之处,将不胜感激。
最佳答案
将函数参数声明为名称前面的函数类型(void Function(String) fun
),或将函数参数声明为中间名称(void fun(String element)
)作为类似函数的C语法,两者之间没有真正的区别。两者都声明了一个类型为fun
的名为void Function(String)
的参数。
Dart最初没有办法内联地编写函数类型,您必须使用typedef,因此大多数较旧的代码都使用void fun(String element)
表示法。引入returnType Function(arguments)
表示法时(由于需要使用它来指定通用函数类型),使用函数类型优先编写函数类型的参数变得更加容易。
两者都被使用,都不是惯用的,使用您认为最适合的方式。
两种格式之间有一个值得记住的区别:
void fun(String element)
表示法要求函数参数的名称。如果您编写void fun(String)
,它将被解释为一个函数,该函数接受一个名称为dynamic
的String
类型的参数。 void Function(String) fun
表示法假定单个参数名称为类型。 我个人更喜欢原始函数参数格式,除了必须编写参数名称。