匿名関数の明示的なreturnステートメント(return
キーワードを使用する)は、匿名関数自体からではなく、囲んでいる名前付き関数から返されるのはなぜですか?匿名関数のスカラreturnステートメント
など。型エラーで次のプログラムの結果:
def foo: String = {
((x: Integer) => return x)
"foo"
}
私はreturn
キーワードを避けることをお勧めしますけど、私は明示的および暗黙のreturn文は、無名関数で別の意味を持っている理由に興味があります。
次の例では、m
の実行が終了した後にreturnステートメントが "存続"し、プログラムの実行時に例外が発生します。匿名関数が囲み関数から返されなかった場合、そのコードをコンパイルすることはできません。
def main(args: Array[String]) {
m(3)
}
def m: (Integer => Unit) =
(x: Integer) => return (y: Integer) => 2
セマンティクスの違いが必要な理由についてもっと深刻な例がありますか?あなたがリストしたものは、述語パラメータを持つ変更された 'foreach'で簡単にエミュレートできます。 – corazza