Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Обращение к переменной (http://www.flasher.ru/forum/showthread.php?t=202832)

ZackMercury 14.08.2013 12:23

Обращение к переменной
 
Допустим, есть массив, и есть переменная, которая ссылается на ту же область в памяти, что и одна из ячеек массива. Один ли это и тот же обьект?
Код AS3:

var arr:Array=["hello", "bye", "nm"];
 
var oneOfCells:String = arr[1];

Можно ли изменить имя переменной, обращаясь к ячейке массива?

Код AS3:

arr[1].name = String("oneOfCellsThatsAreInsideArray");


caseyryan 14.08.2013 12:27

Цитата:

Один ли это и тот же обьект?
Да, если это не примитивный тип данных типа int или Boolean, которые передаются по значениею, а не по ссылке.
Цитата:

Можно ли изменить имя переменной, обращаясь к ячейке массива?
Нельзя. Таким образом изменится свойство name, но не имя переменной которое пишется в редакторе. К слову, после компиляции имя переменной вообще нельзя поменять никак. Да и не нужно это, так как используется оно только для получения ссылки на объект, а ее с таким же успехом хранит и массив.

ZackMercury 14.08.2013 12:37

Цитата:

Сообщение от caseyryan (Сообщение 1143733)
Да, если это не примитивный тип данных типа int или Boolean, которые передаются по значениею, а не по ссылке.

Нельзя. Таким образом изменится свойство name, но не имя переменной которое пишется в редакторе. К слову, после компиляции имя переменной вообще нельзя поменять никак. Да и не нужно это, так как используется оно только для получения ссылки на объект, а ее с таким же успехом хранит и массив.

Тогда основной вопрос:

Как динамически задать новой переменной имя? Тоесть, например, указать ее имя в цикле + I?

Код AS3:

for(var i:int  = 0; i < 3; i++)
{
 
      var ["name"+i]:String;
}
 
name0 = "hello";
name1 = "bye";
name2 = "nm";


cleptoman 14.08.2013 12:43

это не проканает для нединамических классов..используйте хеш для своих целей..тот же массив вам подойдет

Код AS3:

var mc:MovieClip;
var i:uint;
var len:uint = 3;
var hash:Array = [];
for(i = 0; i< len; i++){
mc = new MovieClip();
mc.name = "name" + String(i);
addChild(mc);
hash.push(mc);
}

хотя он вам тут и не нужен...ссылку на дисплейный объект можно получить и по его имени , если он в дисплей листе

filepark 14.08.2013 12:48

Добавлю к первому ответу, String также является примитивным типом, т.е. в данном случае будет передано только значение, а не ссылка на объект.
Кроме того, экземпляры класса String не имеют свойства name и его вызов приведёт к ошибке.
И на один объект могут ссылаться несколько переменных.

KumoKairo 14.08.2013 13:17

Цитата:

Можно ли изменить имя переменной, обращаясь к ячейке массива?
Какой переменной? У вас массив со строками

ZackMercury 14.08.2013 13:18

Цитата:

Сообщение от filepark (Сообщение 1143736)
Добавлю к первому ответу, String также является примитивным типом, т.е. в данном случае будет передано только значение, а не ссылка на объект.
Кроме того, экземпляры класса String не имеют свойства name и его вызов приведёт к ошибке.
И на один объект могут ссылаться несколько переменных.

Я использовал пример, как бы если бы я хотел поменять имя, а не компилящийся код.

Добавлено через 1 минуту
Цитата:

Сообщение от KumoKairo (Сообщение 1143737)
Какой переменной? У вас массив со строками

Это я опечатался спросонья. Сейчас поправлю.

caseyryan 14.08.2013 15:08

Цитата:

Сообщение от SuriTheAngel (Сообщение 1143738)
Это я опечатался спросонья. Сейчас поправлю.

Там по-прежнему ошибка. Нет у String свойства name

C4Grey 14.08.2013 23:20

Цитата:

Сообщение от SuriTheAngel (Сообщение 1143734)
Как динамически задать новой переменной имя?

Обычно, с таких вопросов начинается изучение ООП :)


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

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