当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。