函数接受参数函数-Dart

You*_*mal 4 arguments function dart flutter

之间有什么区别

void test1(void fun(String element)) {
  fun("Test1");
}

//AND

void test2(Function(String element) fun) {
  fun("Test2");
}
Run Code Online (Sandbox Code Playgroud)

我试图同时运行它们,但在输出中找不到任何差异:

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
Run Code Online (Sandbox Code Playgroud)

我是Dart的新手,我一直都在使用Java,所以将函数传递给函数对我来说是新事物,因此如果有人可以向我解释上述代码的不同之处,将不胜感激。

lrn*_*lrn 5

在以名称(void Function(String) fun)开头的函数类型声明函数参数,或在中间(void fun(String element))的情况下声明为类似于C的函数式语法,两者之间并没有真正的区别。两者都声明一个名为funtype 的参数void Function(String)

Dart最初没有办法内联地编写函数类型,您必须使用typedef,因此大多数较早的代码都使用该void fun(String element)表示法。returnType Function(arguments)引入该符号时(因为需要使用它来指定泛型函数类型),使用类型首先编写函数类型的参数变得更加容易。

两者都被使用,都不是惯用的,使用您认为最适合的方式。

两种格式之间有一个值得记住的区别:

  • void fun(String element)符号要求函数参数的名称。如果您编写void fun(String)它,则将其解释为一个函数,该函数接受一个类型dynamic为name的参数String
  • void Function(String) fun表示法假设单个参数名称是类型。

我个人更喜欢原始的函数参数格式,除了必须编写参数名称。