推荐答案
在 Dart 中,匿名函数(也称为 lambda 或闭包)是一种没有名字的函数。它通常用于需要一次性使用的场景,或者作为参数传递给其他函数。匿名函数的语法与普通函数类似,但没有函数名。
var add = (int a, int b) { return a + b; }; print(add(2, 3)); // 输出: 5
本题详细解读
匿名函数的定义
匿名函数在 Dart 中是通过 (参数列表) { 函数体 }
的形式定义的。它没有函数名,因此无法通过函数名来调用。通常,匿名函数会被赋值给一个变量,或者直接作为参数传递给其他函数。
匿名函数的使用场景
作为参数传递:匿名函数常用于作为参数传递给高阶函数,如
forEach
、map
、where
等。var numbers = [1, 2, 3, 4]; numbers.forEach((number) { print(number); });
简化代码:当函数逻辑简单且只使用一次时,使用匿名函数可以避免定义额外的命名函数,从而简化代码。
var doubled = numbers.map((number) => number * 2); print(doubled); // 输出: (2, 4, 6, 8)
匿名函数的语法
参数列表:与普通函数一样,匿名函数可以接受多个参数,参数类型可以显式声明或由 Dart 自动推断。
函数体:函数体可以是一个表达式或一个代码块。如果函数体是一个表达式,可以使用
=>
语法来简化。var square = (int x) => x * x; print(square(5)); // 输出: 25
匿名函数的闭包特性
匿名函数可以捕获其所在作用域中的变量,形成闭包。这意味着即使匿名函数在其定义的作用域之外被调用,它仍然可以访问和修改这些变量。
Function makeAdder(int addBy) { return (int i) => addBy + i; } var add2 = makeAdder(2); print(add2(3)); // 输出: 5
在这个例子中,makeAdder
函数返回一个匿名函数,该匿名函数捕获了 addBy
变量,即使 makeAdder
函数已经执行完毕,返回的匿名函数仍然可以访问 addBy
。