之间有什么区别

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),它将被解释为一个函数,该函数接受一个名称为dynamicString类型的参数。
  • void Function(String) fun表示法假定单个参数名称为类型。

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

    07-24 09:43
    查看更多