で "のtry-catch-最後に" ブロックの評価次の2つのコードは、異なる結果を生成します。"リターン" とScalaの
def x = try{
true
} finally false
ボークxがyがfalse
true
def y:Boolean = try{
return true
} finally {
return false
}
呼び出しを取得します
return
のバージョンはJavaと同じです。
個人的に私は決してスカラで「リターン」を使用しません。しかし、try-catch-finallyブロックの値をスカラーがどのように評価するかを知ることは良いことです。ありがとう。
しかし、「暗黙の復帰」とは何ですか? – xiefei
"暗黙の復帰":間違った単語かもしれませんが、私が意図したことは、コードブロックの最後の行の結果をブロックの戻り値として使用することです。 – Thilo
Thiloが正しいです。 'finally'ブロックに' return'ステートメントを置くことは間違いとみなされ、実際には許されません。 'Finally'は、メソッド本体が成功するか例外をスローするかに関係なく、要素をクリーンアップすることです。それは戻り値を決める場所ではありません!したがって、 'finally'節の本体は' Unit'と評価されます。あなたの最初の例では、 'false'は暗黙的に' Unit'に変換されます。 –