Форум 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=197181)

meliot 03.04.2013 16:49

Синтаксис создания переменной
 
Подскажите пожалуйста как правильно создать переменную, название которой состоит из нескольких строк.
Примерно вот так:
Код AS3:

var m =1;
var "index" + m + "speed" = 0;


Hauts 03.04.2013 16:59

Для подобных целей проще всего использовать поля объекта (поправьте меня, если я ошибаюсь):

Код AS3:

var settingsObject:Object = {};
 
settingsObject["some_" + counter + "_var"] = 125;

Но лучше таким не пользоваться. Лучше заведите массив объектов:

Код AS3:

var settingsArray:Array = [];
 
settingsArray[ counter ] = {};
settingsArray[ counter ].someProperty = 125;


iflamberg 03.04.2013 16:59

Так нельзя. Можно так:
Цитата:

var o:Object = {};
o["index"+m+"speed"] = 0;
Довольно медленно. Желательно использовать просто массивы.

GBee 03.04.2013 17:14

если класс динамический, то можно пихать через this
Код AS3:

this["index" + m + "speed"] = 0;

Но как сказали выше, это не очень хорошо, но местами очень удобно.

Александр Мостовой 03.04.2013 17:30

Декларация переменных создана для четкого регламентирования поведения приложения. Грубо говоря тыкать себя носом что бы не делать того что не задумал. Декларировать переменные с переменными нельзя т.к. это противоречит логике декларации. А вот создать переменную можно.
Код AS3:

this["index" + m + "speed"]

хоть и не нужно. При этом она от этого не станет задекларированной: т.е. компилятор вам не даст обратиться к index22speed без квадратных скобок.

На самом деле тип данных MovieClip - динамический, как и Object, например. Это означает что можно динамически создавать переменные (чего не можем делать в Sprite); Компилятор ругается в воспитательных целях.
Код AS3:

var thisMC:MovieClip = this as MovieClip;
thisMC.index33speed = 100500;
//Так мы можем обращаться к любым новам переменным без декларации.

Теперь вопрос. Расскажите что вас заставляет избегать использования массива?

iflamberg 03.04.2013 17:37

Меня обычно заставляют разреженные массивы вида map[x+"_"+y] где не требуется скорость, но иногда требуется пробежаться по всем элементам массива. Удобно.

Александр Мостовой 03.04.2013 17:46

Это можно сделать вот так:
Код AS3:

                        var array:Array = [];
                        array[5] = "a";
                        array[10] = "b";
                        array[20] = "c";
                        for (var key:String in array) {
                                trace(key, array[key]);
                        }

А, вы имеете ввиду случай DtataGrid например? Ну Adobe тоже практикуют такое в компонентах Flash но я как-то скептически отношусь, хотя может это и быстрее чем какой-нибудь getIndexByXY(x, y)

meliot 03.04.2013 18:29

Всем спасибо, получилось!


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

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