Я программировал некоторые вещи в 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]();
Вышеприведенный код выводит (а):
256
256
256
Я хочу, чтобы это было (б):
0
127
256
Этого не происходит, потому что ActionScript / Haxe назначает ссылку на i функции, а поскольку i равно 256 в конце цикла, где функции оцениваются, поэтому я получаю (a).
Кто-нибудь знает способ избежать этого и получить ожидаемые результаты в (b)?
Спасибо всем вам, ребята, и ваши ответы.
Я думаю, что нашел ответ. Если вы удалите строку, помеченную (A), она сработает, если вы оставите ее, то не сработает. Я уверен, что вы все могли бы понять, почему это происходит. Еще раз спасибо!