過去の日記

2015-03-02 [長年日記]

{}の中身は何回評価されるか [Scala]

今日職場で話題になったこと。勝手に書いてます。

(1 to 10).filter{println("search"); _ > 4}.foreach(println)

を実行したらsearch は何回表示されるか。
10回だと思ったけど。

search
5
6
7
8
9
10

println が1回しか実行されてない。


つまり、

(1 to 10).filter{i => println("search"); i > 4}.foreach(println)

と同じかと思ったら(実際こっちを実行すると10回表示される)、

(1 to 10).filter{println("search"); i => i > 4}.foreach(println)

こう解釈されてて、ブロックの中が一回評価されて最後の i=> i>4 が関数として返されてた。
みたい。