Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Object передаётся по линку или по значению? (http://www.flasher.ru/forum/showthread.php?t=176681)

BuKT 15.03.2012 14:27

Object передаётся по линку или по значению?
 
Код AS3:

for each (var field:String in someObject) {
        someObject[field] = someOtherObject[field]
}

Будут ли равны поля этих Object, учитывая, что (someOtherObject[field] as Object) == null?

Aquahawk 15.03.2012 14:32

В терминах низкоуровневых языков объекты хранят указатели на другие объекты, а передаются указатели по значению. Сами указатели передаются, а не объекты.
Если someOtherObject[field] == null то там хранится указатель на нулевой адрес. При
Код AS3:

someObject[field] = someOtherObject[field];

этот указатель на нулевой адрес копируется в someObject. Таким образом они оба указывают на ноль.
Теперь если мы сделаем
Код AS3:

someOtherObject[field] = new Object();

то someOtherObject будет указывать на новый объект. Однако someObject продолжит указывать на null.

nOobCrafter 15.03.2012 14:33

сложные типы данных передаются по ссылке, простые по значению. простые это int, uint, String, Boolean вроде все, но может забыл чтото.

Aquahawk 15.03.2012 14:38

Код AS3:

 (someOtherObject[field] as Object) == null

а зачем тут as Object?

BuKT 15.03.2012 14:49

Цитата:

а зачем тут as Object
Просто чтобы показать, что в someOtherObject[field] хранится тип, передаваемый значением а не ссылкой

Aquahawk 15.03.2012 14:55

а какой такой тип у нас хранится значение кроме интов, намберов, булеанов и строк, которые были уже упомянуты выше?

BuKT 15.03.2012 14:57

Никакой =) Перечитайте мой ответ ещё раз.

Psycho Tiger 15.03.2012 15:52

Конструкция as Object может быть полезна только для того, чтобы компилятор принял этот экземпляр в качестве экземпляра динамического класса и не ругался на возможно неопределенные свойства. В остальном случае это вызывает только путаницу и ощущение описок.

Inet_PC 15.03.2012 15:58

Видимо ВиКТ пытался, таким образом, показать, что в массиве лежат не простые типы?

Aquahawk 15.03.2012 16:03

BuKT так ответ на твой вопрос получен или нет? Если нет, то мог бы ты переформулировать его?

BuKT 15.03.2012 16:08

as Object не в коде, а просто однозначный комментарий к коду, означающий, что я не храню сложные типы в обрабатываемых Object'ах.

Ответ получен. Изначальный вопрос был таков: могу ли я, прогулявшись по объекту циклом, сменить значения некоторых его полей и не потерять изменения при выходе из цикла?

Aquahawk 15.03.2012 16:10

Цитата:

могу ли я, прогулявшись по объекту циклом, сменить значения некоторых его полей и не потерять изменения при выходе из цикла?
Ничего не понял. Если вы у объекта что-то записал в какое-то поле то естественно оно оттуда никуда не денется.

Inet_PC 15.03.2012 16:14

Цитата:

as Object не в коде, а просто однозначный комментарий к коду, означающий, что я не храню сложные типы в обрабатываемых Object'ах.
К сожалению это не так.

BuKT 15.03.2012 16:34

Цитата:

К сожалению это не так.
Эмм. Что именно? Я употребил это выражение именно с той целью, которую позже описал. У вас есть иная трактовка?

Цитата:

Если вы у объекта что-то записал в какое-то поле то естественно оно оттуда никуда не денется.
Array этому правилу не подчиняется. Надо создавать новое значение поля, доставать поле из массива, например, splice и вставлять туда новое. Может я что-то делаю не так, но в моём опыте подобный обход Array даёт именно такой результат.

gloomyBrain 15.03.2012 16:34

Object-ом является все, кроме undefined. То есть int - тоже Object

Цитата:

Может я что-то делаю не так, но в моём опыте подобный обход Array даёт именно такой результат
Код, пожалуйста

Inet_PC 15.03.2012 16:38

Цитата:

Эмм. Что именно? Я употребил это выражение именно с той целью, которую позже описал. У вас есть иная трактовка?
В том то и проблема, что as Object это не значит, что там сложный тип. Поэтому это не однозначный комментарий.

Psycho Tiger 15.03.2012 17:10

Это вообще не комментарий.
Вот однозначный комментарий:
Код AS3:

// в obj - сложные типы
obj[0] = null;


etc 15.03.2012 17:30

42 as Object


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

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