我遇到了这段代码:
val f = Future { throw new InterruptedException }
f.failed foreach { case t => log(s"error - $t") }
代码使用模式匹配。
在模式匹配中,将值与模式进行比较。但我在这里看不到任何模式。 t看起来更像是价值。那它是如何运作的?
答案 0 :(得分:2)
8.1.1 of the spec部分明确指出:
变量模式x是一个以小写字母开头的简单标识符。它匹配任何值,并将变量名称绑定到该值。
变量t
的确以小写字母开头。
变量模式是"简单模式",而这又是一般模式的特例。
答案 1 :(得分:0)
愿这可以帮到你
/** Asynchronously processes the value in the future once the value becomes available.
*
* WARNING: Will not be called if this future is never completed or if it is completed with a failure.
*
* $swallowsExceptions
*
* @tparam U only used to accept any return type of the given callback function
* @param f the function which will be executed if this `Future` completes with a result,
* the return value of `f` will be discarded.
* @group Callbacks
*/
def foreach[U](f: T => U)(implicit executor: ExecutionContext): Unit = onComplete { _ foreach f }
这个关于Future trait的foreach文档,内部foreach是从scala.util.Try.foreach调用的 并且有他的谴责。
/**
* Applies the given function `f` if this is a `Success`, otherwise returns `Unit` if this is a `Failure`.
*
* ''Note:'' If `f` throws, then this method may throw an exception.
*/
def foreach[U](f: T => U): Unit
这是最重要的事情。 *警告:如果未来未完成或未成功完成,将不会被调用。