Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.02.2016, 20:00
WaldeMar1321 вне форума Посмотреть профиль Отправить личное сообщение для WaldeMar1321 Найти все сообщения от WaldeMar1321
  № 1  
Ответить с цитированием
WaldeMar1321

Регистрация: Mar 2015
Сообщений: 26
По умолчанию Странное поведение 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 предыдущие значения обновляются. И что мне делать?

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


Последний раз редактировалось WaldeMar1321; 04.02.2016 в 20:24.
Старый 04.02.2016, 21:18
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
И что мне делать?
Вот то что вы написали, просто взять этот кусочек и проверить в отдельном тестовом проекте =)

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

Старый 04.02.2016, 21:32
WaldeMar1321 вне форума Посмотреть профиль Отправить личное сообщение для WaldeMar1321 Найти все сообщения от WaldeMar1321
  № 3  
Ответить с цитированием
WaldeMar1321

Регистрация: Mar 2015
Сообщений: 26
Точно такая же модель на предыдущих случаях у меня, и все работает. А можно поподробнее как проверить на "один инстанс" или разные. И как это исправить?

Старый 04.02.2016, 21:37
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 4  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Попробуй после всех циклов взять любой из элементов и изменить значение. Если оно поменяется везде - значит инстанс один =)

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

Старый 04.02.2016, 22:11
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 5  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Интересно как можно зарефакторить цикл?

Старый 04.02.2016, 23:01
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 6  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Этот код вообще не должен работать lenght
Так что возможно у нас не вся информация на руках. А правильный код с нужной длиной :о)) отрабатывает как надо.

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

Старый 04.02.2016, 23:43
Bletraut вне форума Посмотреть профиль Отправить личное сообщение для Bletraut Найти все сообщения от Bletraut
  № 7  
Ответить с цитированием
Bletraut
 
Аватар для Bletraut

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 566
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Проверил, все идеально работает. Косяк точно не в данном коде.
__________________
Я заклинаю вас действовать иначе.

Старый 05.02.2016, 09:51
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 8  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Сообщение от undefined Посмотреть сообщение
Интересно как можно зарефакторить цикл?
То что у вас 2 цикла в одной функции, уже намекает на вынос каждого в отдельный метод
Плюс комметарий между ними неоднозначно намекает, что только циклами там не ограничивается)

Старый 05.02.2016, 10:32
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
То что у вас 2 цикла в одной функции, уже намекает на вынос каждого в отдельный метод
Это вопрос спорный. И уж точно никак не повлияет на работу кода в целом.
Цитата:
Проверил, все идеально работает. Косяк точно не в данном коде.
У тебя эта конструкция вместе с lenght работает? Оо

Старый 05.02.2016, 11:14
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 10  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Это вопрос спорный. И уж точно никак не повлияет на работу кода в целом.
Зато упростит отладку. Вопрос то в этом у ТС =)

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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