PDA

Просмотр полной версии : Название переменной


mikerz
12.06.2002, 16:24
Как мне создать произвольное название переменной? к примеру как в php - ${$str}
set variable не подходит т.к. все равно я потом не смогу к ней никак обратиться :(
Помогите pls если так можно в flash`е

Egoritch
12.06.2002, 18:24
s="temp"+random(20000);
variab=eval(s);
variab=10;

например так....
тогда (кажися) допустим random(20000) станет 7654, имя переменной будет записано в строковой переменной s (то есть станет temp7654) а самой переменной temp7654 присвоится значение 10.

Поправте меня если я не прав..

УильямБрэдберри
12.06.2002, 21:50
че-то вы намутили :)

просто объявить переменную -
var myAnyVariableName = any_Value

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

Забудь про "eval"

составные имена
var a = "a"
var b = "b"
var c = a + b // c = "ab"

var number = 666

this["name"+number] = 100
обращаться к myAnyVariableName можно так

trace("name"+number) //name666
trace(this["name"+number]) //100
trace(this["name"+666])//100
trace(name666) // 100

DeliMIter
12.06.2002, 22:05
2Мастер

Не для массива

this["0"] = something;

определяет для текущего объекта (в общем случае - клипа) переменную 0 (ноль) c некоторым значением. То же справедливо и для спецсимволов. А ты говоришь, не могут с числа начинаться... Еще как могут!!! Ну, не адресуешь их потом напрямую, но! :)))))))))

Nox Noctis
12.06.2002, 23:50
2DeliMIter
...теоретическое знание, оно конечно самодостаточно, только прагма она гораздо дороже :)
ты можешь привести хоть один пример, где такие извращенные переменные могут понадобиться ? :) просто любопытно...

зы:
this[1] = "abcdef";
tst={abcdef:"!!!"};
trace(tst[this[1]]);
...о ! я знаю зачем это нужно !.. вскрывает, значит, чел ASV'шкой свфник в поисках кода... а тут ТАКОЕ... испугается ведь :)))))

Egoritch
13.06.2002, 12:42
2УильямБрэдберри: с п а с и б о !

DeliMIter
13.06.2002, 21:52
2Nox

Если бы я сам такое не использовал, я бы и не постил ответ. Мне данная теория пригодилась, когда понадобилось сделать список неких элементов, но не использовать при этом массив (из-за и без того сложной адресации), список формировался один раз и не менялся. Вполне красиво вышло.

Nox Noctis
13.06.2002, 22:03
хм... что-то я не очень тебя понял...

то есть ты сделал список элементов с именами "0","1","2"... и т д ?

но ведь тогда совсем не обязательно делать это так... можно ведь сделать любым образом однотипно названные элементы - и получить тот же эффект...
типа: "строка0","строка1","строка2"... или ты на именах решил сэкономить ? ;)

зы:
все-таки как-то перегруженные имена напрягают :)
и к тому же кто его знает - может ведь встретиться ситауция, когда например литерал 1 будет интерпретироваться не как число, а как элемента с именем "1".... хотя это всего лишь перестраховка :)

DeliMIter
13.06.2002, 23:06
Конкретнее по ситуации: игрушка Life (надеэсь, не надо пояснять эту всемирно известную задачу), у каждой клетки - 8 соседей. Адресация угребещнейшая, как я ни упрощал. Естественно, чем длиннее адресация, тем больше тормозит, да еще по два прохода за турн. И еще нужен массив на эти 8 элементов. В конечном счете я просто взял и написал

_i = 0;
for (var i = X - 1; i < X + 2; i++)
for (var j = Y - 1; j < Y + 2; j++)
if ((i <> X) or (j <> Y))
this[_i++] = ...[i][j];

И ничего, заработало. И проще стало. Ведь так?