【问题标题】:Lambda Expression as a function parameter in Dart LanguageLambda 表达式作为 Dart 语言中的函数参数
【发布时间】:2020-07-21 05:32:56
【问题描述】:
我正在尝试构建一个类以在 Dart 的 数学序列 中进行一些操作。我期待一个序列作为 lambda 表达式 或 function 。当我尝试构建 class 的构造函数时,我感到困惑。参数和数据类型应该写什么?
lambda 表达式示例:
int sequence(int n) => 7+5*(n-1);
示例函数:
int fib(int n) {
if ((n == 1) || (n == 2)) {
return 1;
} else {
return fib(n - 1) + fib(n - 2);
}
}
如何将 lambda 表达式和函数作为参数提供给另一个函数?
【问题讨论】:
标签:
dart
lambda
parameters
【解决方案1】:
所以你的两个方法的类型是int Function(int),这意味着它需要一个int作为参数并输出一个int。
基本上有两种方法可以做到这一点。一种是将该类型显式类型为参数类型,例如:
int sequence(int n) => 7 + 5 * (n - 1);
int generate1(int Function(int) function, int input) => function(input);
void main() {
print(generate1(sequence, 5)); // 27
}
另一种方法是定义一个typedef,这将是您的类型的简写:
int fib(int n) {
if ((n == 1) || (n == 2)) {
return 1;
} else {
return fib(n - 1) + fib(n - 2);
}
}
typedef SomeFunction = int Function(int n);
int generate2(SomeFunction function, int input) => function(input);
void main() {
print(generate2(fib, 5)); // 5
}
typedef 可以更简单,如果您有更复杂的类型,您要为多个方法重用。