我正在学习Dart编程语言,其中匿名函数的语法让我感到困惑。具体来说,我如何为这样的函数指定返回值类型。
例如,请考虑以下代码:
var f = (int x) {return x + 1;};
在这个例子中,我声明参数x
的类型为int
。我如何明确表示函数返回一个int
?我知道编译器可能会使用类型推断来解决这个问题,但我想明确指定类型,以防在编写更复杂的函数时返回错误类型的值。
我正在学习Dart编程语言,其中匿名函数的语法让我感到困惑。具体来说,我如何为这样的函数指定返回值类型。
例如,请考虑以下代码:
var f = (int x) {return x + 1;};
在这个例子中,我声明参数x
的类型为int
。我如何明确表示函数返回一个int
?我知道编译器可能会使用类型推断来解决这个问题,但我想明确指定类型,以防在编写更复杂的函数时返回错误类型的值。
你可以像这样做:
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标签。您可以像声明普通函数一样声明匿名的内联函数。
int count(int a, int b) {
int innerThing(int c, int d) => c + d;
return innerThing(a, b);
}
如果您计划多次使用内联函数类型,也可以使用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
}
匿名Dart函数在return
中使用了dynamic
数据类型