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)
时间: 2024-10-18 07:16:27