私はActionScript(Haxe)でいくつかのものをプログラミングしてきました。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)でマークされた行を削除すると、それを残していればそれは動作しません。私はあなたがなぜそれが起こるのかをすべて知ることができると確信しています。再度、感謝します!
あなたのユースケースの詳細を教えていただけますか?私はこれを全く理解していません...あなたは同じ機能の256のコピーを作成していますが、決して値を保存しません。 'i'は一度インスタンス化され、各反復で上書きされます。私はあなたが作成する(重複する関数の配列に加えて)唯一の変数です。おそらく関数の結果を格納することはできますか?しかし、配列内に同じ関数を何度も何度も格納しても意味がありません。 –
あなたはそれをより良く説明できますか?あなたがAS3のソースコードにコンパイルしている場合を除いて、このコードはHaXeのボックスの外で動作します。それは事実ですか? – Waneck