gpt4 book ai didi

scala - 如何从返回 Int 的 Scala 中的递归函数中抛出异常

转载 作者:行者123 更新时间:2023-12-05 01:24:15 25 4
gpt4 key购买 nike

我最近开始学习 Scala,作为作业的一部分,我需要编写一个具有以下要求的函数:它必须是递归的,并且在空列表的情况下抛出异常。试过这段代码,但总是抛出异常。

def max(xs: List[Int]): Int =
if (xs.isEmpty) {
throw new NoSuchElementException("empty list")
} else {
if (xs.head > max(xs.tail)) xs.head else max(xs.tail)
}
}

edited: 抱歉弄错了,当然异常需要用new来创建。但是,该功能总是因异常而失败。试过 require(),但它返回一个 Unit 类型,因此编译器说它不能放在那里。有没有一种简单的方法可以在不解析 Try、Option 和其他方法的情况下从 Scala 中的递归函数中抛出异常?

最佳答案

您的代码将始终抛出异常,因为递归将始终缩减为一个空列表。我的假设是如果列表为空,您不想启动任何递归。在这种情况下,您可以定义一个内部函数来执行实际的递归。

def max(xs: List[Int]): Int = {

if (xs.isEmpty) {
throw new NoSuchElementException("empty list")
}

def iter(xs: List[Int], currMax: Int): Int = {

if(xs.isEmpty) {
currMax
}
else {
iter(xs.tail, if(xs.head > currMax) xs.head else currMax)
}
}

iter(xs.tail, xs.head)
}

注意:以上只是一个未经测试完成的快速、肮脏的示例。从风格上讲,这两个示例都将受益于其他人建议的模式匹配。

关于scala - 如何从返回 Int 的 Scala 中的递归函数中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30157411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com