函数接受参数函数-Dart

时间:2018-10-24 06:02:44

标签: function dart arguments flutter

有什么区别
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,所以将函数传递给函数对我来说是新事物,因此,如果有人可以向我解释以上代码的不同之处,将不胜感激。

1 个答案:

答案 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表示形式假定单个参数名称是类型。

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