我知道Function类可以作为参数传递给另一个函数被传递,就像这样:传递一个类型的函数作为参数在DART
void doSomething(Function f) {
f(123);
}
但有约束的参数和返回类型的方法函数参数?
例如,在这种情况下,f
直接调用一个整数,但如果它是一个接受不同类型的函数呢?
我试过将它作为Function<Integer>
传递,但函数不是参数类型。
是否有任何其他方式指定被传递的函数的签名作为参数?
我知道Function类可以作为参数传递给另一个函数被传递,就像这样:传递一个类型的函数作为参数在DART
void doSomething(Function f) {
f(123);
}
但有约束的参数和返回类型的方法函数参数?
例如,在这种情况下,f
直接调用一个整数,但如果它是一个接受不同类型的函数呢?
我试过将它作为Function<Integer>
传递,但函数不是参数类型。
是否有任何其他方式指定被传递的函数的签名作为参数?
只是为了在兰德尔的答案扩大,你的代码可能看起来像:
typedef void IntegerArgument(int x);
void doSomething(IntegerArgument f) {
f(123);
}
Function<int>
看起来这将是一个不错的想法,但问题是,我们可能要指定返回类型,以及在任意数量参数的类型。
这是typedefs的用途!
你可以有一个函数类型的参数或使用typedef
void main() {
doSomething(xToString);
doSomething2(xToString);
}
String xToString(int s) => 's';
typedef String XToStringFn(int s);
void doSomething(String f(int s)) {
print('value: ${f(123)}');
}
void doSomething2(XToStringFn f) {
print('value: ${f(123)}');
}
飞镖V1.23增加了一个新的语法编写函数类型也可以工作在网上。
void doSomething(Function(int) f) {
f(123);
}
它比函数参数语法更有优势,您还可以将它用于变量或其他想要编写类型的地方。
void doSomething(Function(int) f) {
Function(int) g = f;
g(123);
}
var x = new List<int Function(int)>[];