私はActionScript(Haxe)でいくつかのものをプログラミングしていて、この非常に特殊な問題に到達しました。
コードは次のとおりです(疑似:S):
var func:Array = new Array(256);
(A) var i:Int = 0;
for(;i<256;i++) { // OR // for(i in 0...256) {
func[i] = function() { trace(i); }
}
func[0]();
func[127]();
func[256]();
上記のコードは(a)を出力します:
256
256
256
私はそれを(b)にしたい:
0
127
256
これは起こりません。ActionScript/Haxeがiの参照を関数に割り当てており、関数が評価されるループの最後でiが256に等しいため、(a)を取得します。
誰かがそれを避けて(b)で期待される結果を得る方法を知っていますか?
皆さんとあなたの反応に感謝します。
私は答えを見つけたと思います。(A)でマークされた行を削除すると機能しますが、そのままにしておくと機能しません。なぜそうなるのか、皆さんも理解できると思います。再度、感謝します!