首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >dart函数的类型推断

dart函数的类型推断
EN

Stack Overflow用户
提问于 2020-12-26 17:22:26
回答 1查看 100关注 0票数 1

我知道类型记录的类型系统允许一些非常复杂的推论,我想知道我能推动多远的飞镖。

我想要创建一个简单的实用程序函数,它通过运行来延迟未来。

代码语言:javascript
运行
复制
Future<T> Function(Future<T> fut) delay<T>(Duration dur) =>
    (fut) async => (await Future.wait(
          [Future.delayed(dur), fut],
        ))[1] as T;

问题是,我必须将T传递给延迟函数,如下所示:

代码语言:javascript
运行
复制
final delayedPosition<Position>(Duration(seconds: 3));


// later
await delayedPosition(someFutureThatReturnsAPosition);

理想情况下,我希望Dart推断出未来返回的类型,这样我就不必自己指定它了。

这个是可能的吗?如果是的话,情况会怎样?

编辑:

为了明确起见,我想要做的是而不是必须使delay成为通用的,并且从delay返回的函数的返回类型可以从它的参数中推断出来。这似乎造成了混乱。

例如:

代码语言:javascript
运行
复制
// declare delay - I don't know what it should look like

final thingThatDelaysAFutureBy3Seconds = delay(Duration(seconds: 3));

// later
final valFromFuture = await thingThatDelaysAFutureBy3Seconds(someFuture);
EN

回答 1

Stack Overflow用户

发布于 2020-12-26 18:34:00

我不知道这里的问题是什么,不可能从您提供的函数中推断出类型,因为没有可以用来推断类型的上下文。

另外,您发送的示例代码无效,在运行未来之前也没有等待5秒,但是在返回未来值(但它与延迟同时运行)之前等待了5秒,如果您想在延迟传递之后运行未来,则应该使用:

代码语言:javascript
运行
复制
Future<T> Function(Future<T> fut) delay<T>(Duration dur) => (fut) async {
      await Future.delayed(dur);
      return fut;
    };

示例:

代码语言:javascript
运行
复制
Future<void> main(List<String> arguments) async {
  var f = delay<int>(Duration(seconds: 5));
  var v = await f(f1()); // Inferred as int
  print(v);
}

Future<int> f1() => Future.value(1);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65458868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档