1
の理解のために、は、他の行と比較して最初の行に例外がスローされたときに矛盾して動作することがわかりました。例外をスラッシュに入れたときの不一致の動作
は、次のコード例を検討:
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
import scala.util.{Failure, Success}
object ForComprehensionTester {
def main(args: Array[String]): Unit = {
val result: Future[String] = for {
x <- returnString() // Comment out this line and exception will not be captured, but propagated.
y <- throwException()
} yield y
result.onComplete {
case Success(s) => System.out.println(s"Success: $s")
case Failure(t) => System.out.println(s"Exception captured!")
}
Thread.sleep(2000)
}
def returnString() = Future {
"content"
}
def throwException(): Future[String] = throw new RuntimeException
}
例外で上記のコードの結果はonCompleteの機能に取り込まれ、処理されます。しかし、8行目をコメントアウトすると、代わりに例外が伝播します。
誰かが何が起こっているのか説明できますか?
をキャプチャするには、以下のような
throwException
を宣言します。すべて今クリアする。 – Obszczymucha