俺言語とクロージャ
ケース1:
fun main() { var f; m = 1; { var m = 2; f = fun() { print( m); var m = 3; // このmは無名関数のローカル変数 print( m); }; } f(); // => 2, 3 print(m); // => 1 }
ケース2:
fun main() { var f; var m = 1; { f = fun() { print( m); }; var m = 2; // このmは無名関数と同じスコープ } f(); // => 2 }
ケース1は予想通りの挙動だけど,2が気持ち悪い.fに無名関数を代入している時点では,関数の中身を評価していないので,mが同じスコープに存在していないことを知らない.