【问题标题】: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 可以更简单,如果您有更复杂的类型,您要为多个方法重用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多