簡単な括弧のバランシング関数を書こうとしているときに、scala が if ステートメントを評価する方法がわからないことを知りました。
def balance(chars: List[Char]): Boolean = {
def loop(chars: List[Char], opened: Int): Boolean = {
println(opened)
println(chars.head)
if (opened < 0) return false
if (chars.isEmpty && opened == 0) return true
if (chars.isEmpty && opened > 0) return false
if (!chars.isEmpty && chars.head.toString == "(") loop(chars.tail, opened+1)
if (!chars.isEmpty && chars.head.toString == ")") loop(chars.tail, opened-1)
else loop(chars.tail, opened)
}
loop(chars, 0)
}
これを実行すると、3 回目の反復までに、println(opened) が表示され、opened = -1 が要求されます。(opened < 0) ----> (-1 < 0) -----> true と想像したので、false を返します。そうではありません - なぜですか?