Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Странное поведение Vector.push() и Array.push() (http://www.flasher.ru/forum/showthread.php?t=212418)

WaldeMar1321 04.02.2016 20:00

Странное поведение Vector.push() и Array.push()
 
Здравствуйте!
Есть допустим такой код:
Код AS3:

public var Next:Vector.<Point>;
//..............
Next = new Vector.<Point>();
for(var i:int = 0; i < 10; i++)
{
    var p:Point = new Point(i,i*2);//допустим
    Next.push(p);
//  Next[i] = p; //Эти варианты я тоже пробовал, с тем же результатом.
//  Next[Next.lenght] = p;
}
//Где-то дальше. Никаких манипуляций с вышеописанным вектором не было
for(var j:int = 0; j < Next.lenght; j++)
{
    trace(Next[j].x, Next[j].y);//у всех элементов значения x = 9  y = 18 (последней итерации)
}

Может кто-то объяснить, или хотя бы намекнуть в чем проблема? Даже если сразу после заполнения вектора вывести его, или обратится к любому его элементу, вывод один и тот-же - последняя итерация. В гугле ничего не нашел(((

P.S. Запускал отладчик, и там видно, как после каждого обращения push предыдущие значения обновляются. И что мне делать?

Заранее спасибо!

i.o. 04.02.2016 21:18

Цитата:

И что мне делать?
Вот то что вы написали, просто взять этот кусочек и проверить в отдельном тестовом проекте =)

А по факту, очень похоже, что в массив был запушен 10 раз один и тот же инстанс, а не разные

WaldeMar1321 04.02.2016 21:32

Точно такая же модель на предыдущих случаях у меня, и все работает. А можно поподробнее как проверить на "один инстанс" или разные. И как это исправить?

i.o. 04.02.2016 21:37

Попробуй после всех циклов взять любой из элементов и изменить значение. Если оно поменяется везде - значит инстанс один =)

Исправляется рефакторингом. Тут без вариантов собственно.

undefined 04.02.2016 22:11

Интересно как можно зарефакторить цикл?

GBee 04.02.2016 23:01

Этот код вообще не должен работать lenght
Так что возможно у нас не вся информация на руках. А правильный код с нужной длиной :о)) отрабатывает как надо.

Добавлено через 1 минуту
У вас кстати вот здесь в боевом коде for(var i:int = 0; i < 10; i++); точки с запятой нет?

Bletraut 04.02.2016 23:43

Проверил, все идеально работает. Косяк точно не в данном коде.

i.o. 05.02.2016 09:51

Цитата:

Сообщение от undefined (Сообщение 1191587)
Интересно как можно зарефакторить цикл?

То что у вас 2 цикла в одной функции, уже намекает на вынос каждого в отдельный метод
Плюс комметарий между ними неоднозначно намекает, что только циклами там не ограничивается)

caseyryan 05.02.2016 10:32

Цитата:

То что у вас 2 цикла в одной функции, уже намекает на вынос каждого в отдельный метод
Это вопрос спорный. И уж точно никак не повлияет на работу кода в целом.
Цитата:

Проверил, все идеально работает. Косяк точно не в данном коде.
У тебя эта конструкция вместе с lenght работает? Оо

i.o. 05.02.2016 11:14

Цитата:

Это вопрос спорный. И уж точно никак не повлияет на работу кода в целом.
Зато упростит отладку. Вопрос то в этом у ТС =)


Часовой пояс GMT +4, время: 10:31.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.