功能范围

Dart 函数也可以匿名声明或嵌套声明。例如,要创建嵌套函数,只需在现有功能块中打开一个新功能块

void outerFunction() {
  
    bool innerFunction() {
        /// Does stuff
    }
}

函数 innerFunction 现在可以在 outerFunction 内部使用,也可以仅在内部使用。没有其他其他功能可以访问它。

Dart 中的函数也可以匿名声明,通常用作函数参数。一个常见的例子是 List 对象的 sort 方法。此方法采用带有以下签名的可选参数:

int compare(E a, E b)

文档说明如果 ab 相等,函数必须返回 0。如果 a < b 则返回 -1,如果 a > b 则返回 1

知道这一点,我们可以使用匿名函数对整数列表进行排序。

List<int> numbers = [4,1,3,5,7];

numbers.sort((int a, int b) {
   if(a == b) {
      return 0;
   } else if (a < b) {
      return -1;
   } else {
      return 1;
   }
});

匿名函数也可以绑定到标识符,如下所示:

Function intSorter = (int a, int b) {
   if(a == b) {
      return 0;
   } else if (a < b) {
      return -1;
   } else {
      return 1;
   }
}

并用作普通变量。

numbers.sort(intSorter);