gpt4 book ai didi

scala - 如何告诉 Scala 编译器 while 循环将返回一个值?

转载 作者:行者123 更新时间:2023-12-04 19:59:55 24 4
gpt4 key购买 nike

一些算法执行条件为 true 的 while 循环,并且(肯定)会在某个点以 while 循环体内的 return 语句结束。例如。:

def foo: Int = {
while(true) {
// At some time, the while loop will do a return statement inside its body
if( ... )
return 0
}
}

简单示例(无语义):
def foo: Int = {
var i = 0
while(true) {
i += 1
if(i == 10)
return 0
}
}

Scala 编译器提示类型不匹配,因为 while 循环的类型为 Unit 并且编译器不知道 while 循环将在某个时候返回一个值。我们可以通过以下解决方法解决此问题:
def foo: Int = {
var i = 0
while(true) {
i += 1
if(i == 10)
return 0
}
0 // !
}

但这看起来很难看。有更好的解决方法吗?甚至是解决此类问题的更好方法?

最佳答案

你可以抛出一个异常:

def foo: Int = {
var i = 0
while(true) {
i += 1
if(i == 10)
return 0
}
throw new IllegalStateException("This should never happen")
}

编译器将停止提示类型不匹配,并且由于 while 循环总是返回一些东西,所以永远不会抛出异常。如果是这样,您将很快发现您做错了什么:)。

还有其他方法可以编写这个循环,它们更符合规范和 Scala 风格,但鉴于您提供的代码,这将以清晰简单的方式完成工作。

关于scala - 如何告诉 Scala 编译器 while 循环将返回一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12070292/

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