【问题标题】:What does the parameter in Promise.tryComplete refer to?Promise.tryComplete 中的参数指的是什么?
【发布时间】:2013-12-15 05:30:36
【问题描述】:

谁能告诉我tryComplete函数中的参数指的是什么?

def any[T](fs: List[Future[T]]): Future[T] = {
   val p = Promise[T]()

   fs foreach (x => x.onComplete(p.tryComplete(_)))

   p.future
}

我知道这里的下划线是Try[T] 类型。这个Try[T] 来自哪里?

【问题讨论】:

  • x.onComplete(p.tryComplete(_)) ~ x.onComplete(_ => p.tryComplete(_))
  • onComplete 的输入参数应该是“Try[T] => U”。那么如何理解呢?

标签: scala promise future


【解决方案1】:

让我们从头开始。因为fsList[Future[T]],所以你知道xFuture[T]

您需要注册一个回调,该回调将在x 的结果可用时触发。最简单的方法是使用onComplete,它采用Try[T] => U 类型的函数。

所以下划线是Try[T],它包含x 的结果,Future[T]Future 有两种可能的结果:Success[T],当Future[T] 工作并保持结果时,Failure[T],因为Future[T] 不工作而保持异常。

所以Try 类似于Option,这是一种安全地表示结果的方式。

希望对您有所帮助。

【讨论】:

  • Try[T] 保存 x 的结果。知道了。谢谢!
  • 简单地说,是的。但是知道如何在Try monad 的上下文中使用该结果仍然很重要。此外,如果答案有帮助,点赞和/或接受会很好。
  • 我想投票,但我没有足够的声誉。对不起。
  • 哈哈是真的。不用担心。好吧,Scala 是一门坚韧但功能强大的语言,我还在学习。祝你工作顺利!
  • "既然 fs 是一个 List[Future[Future[T]]" 应该是 List[Future[T]],不应该吗?
【解决方案2】:

onComplete 接受一个函数。下划线接收该函数的第一个参数。如果有多个下划线,第一个下划线表示第一个参数,第二个下划线表示第二个参数,依此类推。

【讨论】:

  • 我知道这里的下划线是 Try[T] 类型。我想知道这个 Try[T] 来自哪里?
猜你喜欢
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
相关资源
最近更新 更多