将类型函数作为Dart中的参数传递
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将类型函数作为Dart中的参数传递相关的知识,希望对你有一定的参考价值。
我知道Function类可以作为参数传递给另一个函数,如下所示:
void doSomething(Function f) {
f(123);
}
但有没有办法约束参数和函数参数的返回类型?
例如,在这种情况下,f
直接在整数上调用,但如果它是一个接受不同类型的函数呢?
我尝试将其作为Function<Integer>
传递,但函数不是参数类型。
有没有其他方法来指定作为参数传递的函数的签名?
答案
Dart 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)>[];
另一答案
编辑:请注意,此答案包含过时的信息。有关更多最新信息,请参阅Irn's answer。
为了扩展Randal的答案,您的代码可能类似于:
typedef void IntegerArgument(int x);
void doSomething(IntegerArgument f) {
f(123);
}
Function<int>
似乎是一个不错的主意,但问题是我们可能想要指定返回类型以及任意数量的参数的类型。
另一答案
您可以使用函数类型参数或使用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)}');
}
另一答案
这就是typedefs的用途!
另一答案
以供参考。
int execute(int func(int a, int b)) => func(4, 3);
print(execute((a, b) => a + b));
以上是关于将类型函数作为Dart中的参数传递的主要内容,如果未能解决你的问题,请参考以下文章
使用 std::thread 函数 C++11 将指针作为参数传递
如何在 Dart 中将 Navigator 函数作为参数传递?
如何将参数从 Dart 传递到用 Typescript 编写的 Cloud 函数,它还给了我错误代码 UNAUTHENTICATED