2
TYPE A:Wyこれらの一見同等の関数定義は、異なる結果をもたらしますか?
val even1 = (x:Int) => { println("in even1"); x % 2 == 0}
REPLの出力:
even1: Int => Boolean = <function1>
のTYPE B:REPL上
val even2 : Int => Boolean = { println("in even2");_% 2 == 0}
が出力:
in even2
even2: Int => Boolean = <function1>
私は」の違いを知っていますdef 'と関数の 'val'宣言は、上記の状態は私とは少し違って見えます。ご理解ください。
'even1のprintln文はeven1が呼び出されるたびに実行されますが、even2のprintln文はeven2が定義されたときに一度だけ実行されます。どうして?あなたが提供する答えは 'even1'にも当てはまります:'右辺はブロックです... ' – jarandaf
私は同じ質問をしたいのですが、なぜこの異なる動作ですか?両方の関数として、宣言はREPL上で同じように見えます出力は – Sunny
@ jarandafです。「even1」の定義の右辺はブロックではなく、関数です: '(x:Int)=> {println(" even1 "); x%2 == 0} 'となります。 – Jubobs