任何人都可以告诉我参数在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]
来自哪里?
答案 0 :(得分:5)
让我们从头开始。由于fs
是List[Future[T]]
,因此您知道x
是Future[T]
。
您需要注册一个在x
的结果可用时将触发的回调。执行此操作的简单方法是onComplete
,它采用类型Try[T] => U
的函数。
所以下划线是Try[T]
,其中包含x
Future[T]
的结果。当Future
工作并保存结果时Success[T]
Future[T]
有两种可能的结果,而Failure[T]
因Future[T]
而保留异常没用。
所以Try
类似于Option
,这是一种安全地表示结果的方法。
希望有所帮助。
答案 1 :(得分:0)
onComplete
接受一项功能。下划线接收该函数的第一个参数。如果有多个下划线,则第一个下划线表示第一个参数,第二个下划线表示第二个参数,依此类推。