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

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

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

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 270
По умолчанию Сами объекты и ссылки на них

Друзья, поясните мне, пожалуйста, ещё один момент.

Столкнулся с такой ситуацией. Создаю в неком классе массив, наполняю какими-то элементами. Передаю в конструктор другого класса, которому поручено переписать все элементы полученного массива "к себе" и как-то с ними поработать, но (самое главное!) оставить в целости оригинальный массив, полученный из вне. Но вот такая запись:

Код AS3:
private var _intermalArray: Array = [];
 
public function SomeClass(externalArray: Array)
{
_internalArray = externalArray;
}
как выяснилось, ни фига не делает дубликат массива, а лишь передаёт ссылку. И все изменения отражаются также и в исходном. Так и должно быть? И вообще всегда ли при передаче переменных, содержащих некий объект, передаётся только ссылка на сам объект? Как-то я не чувствую логики.

P.S. Задачу пока что решил через цикл, который последовательно перебирает элементы полученного массива и записывает по одному во внутренний. В таком случае они действительно разными получаются.
__________________
Не сломано - не чини!

Старый 18.05.2018, 12:50
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 2  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,182
Записей в блоге: 6
Да, это азы. Копируются только значения примитивных типов: Int, Uint, String, Number. Для любых объектов, коим является и массив, передаётся ссылка на объект.
Если ещё не читал Колина Мука - самое время
__________________
Дети не должны знать о своих родителях


Последний раз редактировалось Tails; 18.05.2018 в 13:07.
Старый 18.05.2018, 12:55
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,391
Код AS3:
_internalArray = externalArray.concat();
Однако надо понимать, что внутри массива тоже хранятся ССЫЛКИ, и при его дублировании сами объекты – элементы массива не дублируются, то есть ты получаешь дубликат массива как упорядоченной структуры, и можешь поиграться с этой структурой, переставляя, удаляя и добавляя элементы, т.е. меняя МАССИВ.
__________________
Reality.getBounds(this);

Старый 18.05.2018, 13:06
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 4  
Ответить с цитированием
Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 270
Tails, Wolsh, спасибо, исчерпывающе. Наверное я из-за примитивных типов и запутался, т.к. в основном применительно к ним подобное происходит: получили, скопировали, поработали с результатом.
__________________
Не сломано - не чини!

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

Регистрация: Jun 2012
Адрес: Sydney
Сообщений: 6,493
Записей в блоге: 4
https://help.adobe.com/ru_RU/FlashPl...y.html#slice()
__________________
Ко мне можно и нужно обращаться на ты)

Старый 18.05.2018, 20:46
DEVORON вне форума Посмотреть профиль Отправить личное сообщение для DEVORON Найти все сообщения от DEVORON
  № 6  
Ответить с цитированием
DEVORON

Регистрация: Jul 2014
Сообщений: 31
Позволю себе добавить, что работа с типизированным списком Vector для широкого круга задач более рациональна.
https://help.adobe.com/ru_RU/as3/mob...c87b-7fff.html

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

Регистрация: Jun 2012
Адрес: Sydney
Сообщений: 6,493
Записей в блоге: 4
Цитата:
Сообщение от DEVORON Посмотреть сообщение
Позволю себе добавить, что работа с типизированным списком Vector для широкого круга задач более рациональна.
https://help.adobe.com/ru_RU/as3/mob...c87b-7fff.html
Удивительно, что это сайт адоби. Не знаю кто там проводил тестирование вектора на этой странице, но оно сделано неверно. Тестировать нужно в релизной версии плеейра / эйра, а там, очевидно тестировалось в отладочном, который производит много всякой фигни влияющей на производительность "за кадром".
Ну это так, отступление, все равно он работает быстрее простого массива, видимо из-а отсутствия боксинга внутри.

А я хотел здесь сказать, что для широкого круга задач, как раз рациональнее исползовать Array, потому, что с ним в коде работать проще. А Vector лучше использовать для узкого круга, где объектов нужно обрабатывать очень много и скорость играет важную роль
__________________
Ко мне можно и нужно обращаться на ты)

Старый 18.05.2018, 22:26
DEVORON вне форума Посмотреть профиль Отправить личное сообщение для DEVORON Найти все сообщения от DEVORON
  № 8  
Ответить с цитированием
DEVORON

Регистрация: Jul 2014
Сообщений: 31
Цитата:
Сообщение от caseyryan Посмотреть сообщение
А я хотел здесь сказать, что для широкого круга задач, как раз рациональнее исползовать Array, потому, что с ним в коде работать проще. А Vector лучше использовать для узкого круга, где объектов нужно обрабатывать очень много и скорость играет важную роль
Смотря какой процент занимают типизированные элементы в проекте. Классы, наследованные от общего родителя, классы реализующие общий интерфейс

Если для Array преимущество в гибкости(принимает любые типы), то для Vector в наглядности(известно, с каким типом работаем)


Последний раз редактировалось DEVORON; 18.05.2018 в 23:30.
Старый 19.05.2018, 15:35
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Sydney
Сообщений: 6,493
Записей в блоге: 4
Цитата:
Смотря какой процент занимают типизированные элементы в проекте. Классы, наследованные от общего родителя, классы реализующие общий интерфейс

Если для Array преимущество в гибкости(принимает любые типы), то для Vector в наглядности(известно, с каким типом работаем)
Вот это я бы и назвал узким кругом задач
__________________
Ко мне можно и нужно обращаться на ты)

Старый Сегодня, 10:01
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 10  
Ответить с цитированием
Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 270
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Спасибо, caseyryan. Даже обидно, смотрел-смотрел и просмотрел, что такое решение штатно есть.

И да, на практике у меня уже несколько раз получалось сначала забацать Array, а потом по мере упорядочивания процесса переводить его в Vector.
__________________
Не сломано - не чини!

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

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

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


 


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


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