【发布时间】:2012-08-23 07:37:22
【问题描述】:
有些算法会在条件为真的情况下执行一个 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 // !
}
但这看起来很难看。有更好的解决方法吗?或者对于这类问题有更好的解决方案?
【问题讨论】:
-
你为什么不把测试条件放在你有
true的地方? -
请不要使用 while(true) ... 或 ELSE,请使用参与者、Future 或并发计算中的任何结构来处理没有终止的问题。