2015-03-02 [長年日記]
■{}の中身は何回評価されるか
今日職場で話題になったこと。勝手に書いてます。
(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 が関数として返されてた。
みたい。