一部のアルゴリズムは、条件 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
}
}
while ループの型が Unit であり、コンパイラは while ループがある時点で値を返すことを認識していないため、Scala コンパイラは型の不一致について警告します。次のような回避策でこれを修正できます。
def foo: Int = {
var i = 0
while(true) {
i += 1
if(i == 10)
return 0
}
0 // !
}
しかし、これは醜く見えます。より良い回避策はありますか? または、この種の問題に対するより良い解決策はありますか?