匿名函数的返回类型

29

我正在学习Dart编程语言,其中匿名函数的语法让我感到困惑。具体来说,我如何为这样的函数指定返回值类型。

例如,请考虑以下代码:

var f = (int x) {return x + 1;};

在这个例子中,我声明参数x的类型为int。我如何明确表示函数返回一个int?我知道编译器可能会使用类型推断来解决这个问题,但我想明确指定类型,以防在编写更复杂的函数时返回错误类型的值。


1
我觉得这里没有任何一个答案真正有效。有人有更新的信息吗? - Mattia Rasulo
这也让我感到困惑。难道Dart没有明确声明返回类型的语法吗?这太奇怪和令人失望了。 - obe
4个回答

24

你可以像这样做:

int Function(int x) f = (int x) {return 1 + x;};
String Function(String x, String y) concatenate = (String x, String y) {return '$x$y';};

编辑: 以下是一种使用类型转换的更简单方法:

int f = (int x) {return x + 1;} as int;
:无需翻译,这是一个用于标记句子结尾的HTML标签。

2
最后一个示例不再有效 - 如果它曾经有效过的话。 - Zombo

6

您可以像声明普通函数一样声明匿名的内联函数。

int count(int a, int b) {
  int innerThing(int c, int d) => c + d;

  return innerThing(a, b);
}

那可能更容易些。

1
是的,我意识到这是可能的。我希望能够避免这种情况。我觉得它限制了匿名函数的实用性。这也是我不喜欢 Python 的原因之一。 - safsaf32
11
根据定义,这并不是匿名的,因为需要填写姓名。这是一个不错的解决办法,但它并没有回答所问的问题。 - Zombo

-1

如果您计划多次使用内联函数类型,也可以使用typedef

typedef CalcCallback = int Function(int a, int b);

enum Operation {
  sum,
  diff,
}

CalcCallback calc(Operation operation) {
  CalcCallback sum = (int a, int b) => a + b;
  CalcCallback diff = (int a, int b) => a - b;

  return operation == Operation.sum ? sum : diff;
}


void main() {
  print(calc(Operation.sum)(5, 5)); // 10
  print(calc(Operation.diff)(20, 5)); // 15
}

-1

匿名Dart函数在return中使用了dynamic数据类型


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接