無名関数内の明示的な return ステートメント (return
キーワードを使用するもの) が、無名関数自体からだけでなく、囲んでいる名前付き関数から戻るのはなぜですか?
たとえば、次のプログラムは型エラーになります。
def foo: String = {
((x: Integer) => return x)
"foo"
}
キーワードを避けることが推奨されていることは知っていますreturn
が、明示的および暗黙的な return ステートメントが無名関数で異なるセマンティクスを持つ理由に興味があります。
次の例では、return ステートメントは の実行が終了した後も「存続」しm
、プログラムは実行時例外になります。無名関数が囲んでいる関数から返されない場合、そのコードをコンパイルすることはできません。
def main(args: Array[String]) {
m(3)
}
def m: (Integer => Unit) =
(x: Integer) => return (y: Integer) => 2