【发布时间】:2015-10-29 01:48:44
【问题描述】:
在某种程度上,期货似乎是真的。他们在简单易用的情况下轻视了多线程,拥抱它们让我更喜欢 Scala 编码。
也就是说,我发现自己的理解存在漏洞。假设我们有一个函数:
def foo: Future[C] = {
val f: Future[A] = ...
val g: A => Future[B] = ... // DB access maybe. Don't care about return type.
val h: A => Future[C] = ...
// Monads are great.
f.flatMap { a =>
g(a) // Eval time? Return type?
h(a)
}
}
问题
-
foo和h不依赖于g的返回值。即使g没有完成,他们会完成吗?也就是说,如果g还没有完成,foo.map(...)会产生h(a)的值吗? - 这里
g的返回类型是什么?它被处理为Unit,因为它被忽略了吗?
【问题讨论】: