當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Scala util.Try用法及代碼示例


用法 一

sealed abstract class Try[+T] extends Product with Serializable

Try 類型表示可能導致異常或返回成功計算值的計算.它類似於 scala.util.Either 類型,但在語義上有所不同。

Try[T] 的實例是 scala.util.Success [T] 或 scala.util.Failure [T] 的實例。

例如,Try 可用於對用戶定義的輸入執行除法,而無需在所有可能發生異常的地方顯式執行 exception-handling。

例子:

import scala.io.StdIn
import scala.util.{Try, Success, Failure}

def divide: Try[Int] = {
  val dividend = Try(StdIn.readLine("Enter an Int that you'd like to divide:\n").toInt)
  val divisor = Try(StdIn.readLine("Enter an Int that you'd like to divide by:\n").toInt)
  val problem = dividend.flatMap(x => divisor.map(y => x/y))
  problem match {
    case Success(v) =>
      println("Result of " + dividend.get + "/"+ divisor.get +" is: " + v)
      Success(v)
    case Failure(e) =>
      println("You must've divided by zero or entered something that's not an Int. Try again!")
      println("Info from the exception: " + e.getMessage)
      divide
  }
}

的一個重要屬性Try在上麵的例子中顯示的是它的能力管道或鏈式操作,沿途捕獲異常。這flatMapmap上例中的組合器本質上都傳遞了它們成功完成的值,包在Success類型以使其由鏈中的下一個組合器進一步操作,或者包裝在Failure類型通常被簡單地傳遞到鏈上。組合器如recoverrecoverWith旨在在失敗的情況下提供某種類型的默認行為。

注意: 隻有非致命的異常被組合器捕獲Try(參考scala.util.control.NonFatal)。另一方麵,將拋出嚴重的係統錯誤。

注意::除非文檔中另有說明,否則所有 Try 組合子都會捕獲異常並返回失敗。

Try 在作為 Twitter 堆棧的一個組成部分使用多年後加入了 Scala 標準庫。

伴生:

object

源碼:

Try.scala

用法 二

object Try

伴生:

class

源碼:

Try.scala

相關用法


注:本文由純淨天空篩選整理自scala-lang.org大神的英文原創作品 util.Try。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。