Странно выглядящий образец в Scala - PullRequest
0 голосов
/ 05 мая 2018

я наткнулся на этот код:

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

Код использует сопоставление с образцом.

При сопоставлении с образцом значение сравнивается с образцом. Но я не вижу здесь никакой картины. Т больше похож на значение. Так как же это работает?

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

май, это может вам помочь

/** 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 }

эта foreach документация по признаку Future, внутренний 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

это самое главное. * ПРЕДУПРЕЖДЕНИЕ: не будет вызвано, если это будущее никогда не завершается или если оно завершается с ошибкой.

0 голосов
/ 05 мая 2018

Раздел 8.1.1 спецификации однозначно утверждает:

Шаблон переменной x - это простой идентификатор, который начинается со строчной буквы. Он соответствует любому значению и привязывает имя переменной к этому значению.

Переменная t начинается с буквы нижнего регистра.

Переменные шаблоны - это «простые шаблоны», которые, в свою очередь, являются частным случаем общего шаблона.

...