执行函数期间的运行时异常
Runtime Exception during executing a function
我正在尝试 运行 scala 中的一个函数
def sum(xs: List[Int]): Int = xs match {
case Nil => throw new java.util.NoSuchElementException("Minimum number of elements")
case x :: xs => x + sum(xs)
}
当我尝试这样 运行 时,
sum(List(1,2,3))
我收到 运行时间异常
java.util.NoSuchElementException: Minimum number of elements
at .sum(<console>:12)
at .sum(<console>:13)
另一方面,这行得通
def sum(xs: List[Int]): Int = xs match {
case Nil => 0
case x :: xs => x + sum(xs)
}
List(1,2,3)
等同于 1::2::3::Nil
因此您的函数按以下顺序计算
sum(1::2::3::Nil) = 1 + sum(2::3::Nil)
sum(2::3::Nil) = 2 + sum(3::Nil)
sum(3::Nil) = 3 + sum(Nil)
最后 sum(Nil)
抛出异常。
您可以从以下问题中获得更多信息。
Why is Nil required at the end of a list built using the cons operator
我正在尝试 运行 scala 中的一个函数
def sum(xs: List[Int]): Int = xs match {
case Nil => throw new java.util.NoSuchElementException("Minimum number of elements")
case x :: xs => x + sum(xs)
}
当我尝试这样 运行 时,
sum(List(1,2,3))
我收到 运行时间异常
java.util.NoSuchElementException: Minimum number of elements
at .sum(<console>:12)
at .sum(<console>:13)
另一方面,这行得通
def sum(xs: List[Int]): Int = xs match {
case Nil => 0
case x :: xs => x + sum(xs)
}
List(1,2,3)
等同于 1::2::3::Nil
因此您的函数按以下顺序计算
sum(1::2::3::Nil) = 1 + sum(2::3::Nil)
sum(2::3::Nil) = 2 + sum(3::Nil)
sum(3::Nil) = 3 + sum(Nil)
最后 sum(Nil)
抛出异常。
您可以从以下问题中获得更多信息。
Why is Nil required at the end of a list built using the cons operator