Play scala 6 函数式的异常处理

1.捕获异常给了我们恢复程序的机会。这是异常存在的好处。

异常也使程序的可读性变差,比如异常带来了依赖于上下文的变量替换,可能出现异常的方法不是类型安全的(即:不会像它的接口承诺地那样运行)

函数式异常处理的主要思想是: 不抛出异常,而是返回一个值,指示异常已经发生。就像C语言中的return code.


2.看一个“偏函数”:对参数的值有一定前提假设的函数

def mean(xs: Seq[Double]): Double =
    if (xs.isEmpty)
      throw new ArithmeticException("mean of empty list")
    else xs.sum / xs.length


3.折中的解决方法:既要能够方便地添加异常处理逻辑,用于修复程序,又要能够类型安全,保证函数的函数性

  sealed trait Option[+A]
  case class Some[+A](get: A) extends Option[A]
  case object None extends Option[Nothing]
  def mean(xs: Seq[Double]): Double =
    if (xs.isEmpty) None
    else Some(xs.sum / xs.length)



你可能感兴趣的:(scala)