下記のコードの出力結果は、すべて3となる。
def arr = [] for (int i=0; i<3; i++){ arr << { println i } } arr.each { it() } // 出力結果 // ==> 3 // ==> 3 // ==> 3クロージャ内の出力関数が実行される時には変数i はすでにインクリメントされたものが出力されるようだ。。
変数i をクロージャの引数として渡すと、うまくいくようで
その為に、カリー化して変数を引数として渡しておく必要がある。
for (int i=0; i<3; i++){ arr << { i_ -> println i_ }.curry(i) } arr.each { it() } // 出力結果 // ==> 0 // ==> 1 // ==> 2
ループ内で書き換わる変数をクロージャ内で利用する際には、
カリー化して変数を固定しておかないと、あとで呼び出すときに困る。
0 件のコメント:
コメントを投稿