Scala中奇怪的模式匹配

时间:2018-05-05 12:26:47

标签: scala pattern-matching

我遇到了这段代码:

val f = Future { throw new InterruptedException }
f.failed foreach { case t => log(s"error - $t") }

代码使用模式匹配。

在模式匹配中,将值与模式进行比较。但我在这里看不到任何模式。 t看起来更像是价值。那它是如何运作的?

2 个答案:

答案 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

这是最重要的事情。    *警告:如果未来未完成或未成功完成,将不会被调用。