Просмотр полной версии : Eval(txt)._x=.... Eval(txt+"._x=..."); Как выполнить строку?
Вопрос такой.
есть у нас Eval();
если есть мувик mc, то написав так:
txt="this.mc";
eval(txt)._x=100; // все работает.
command="this.mc._x=100";
eval(txt); // не работает.
А хочется так, сделать чтобы ЛЮБУЮ строчку можно было выполнить.
КАК это реализуется ?
Спасибо!
Nox Noctis
11.12.2001, 13:41
во-первых мона было и без евала написать
txt = this.mc;
это ссылкой называется ;)
а команду евал не выполнит... а то это была б халява: динамически изменяемый текст скрипта...
евал только по имени переменной получает ее значение... а ты хочешь сделать аналог джскриптового document.write()
извиняйте, братцы, бананьев нема :D
Как енто бананОв немА!
Хачу бананов!
Хачу динамически исполняемый текст. А что?
Почему нельзя?
Может кто всетаки придумал как енто сделать ?
Nox Noctis
11.12.2001, 14:08
ну, при определенных познаниях в черной магии...
Черная магия гворишь понадобится ?
А может можно ActionScriptom ограничится ?
Nox Noctis
11.12.2001, 15:05
что значит ограничится ?! а ActionScript это по-твоему что ? :p
Action Script - Белая магия. ;)
Посмеятся кончно есть над чем, но может есть у кого идеи поконкретней, а то нас в ОффСникерсе обвинят ;)
Итак вопрос к знатокам Белой и Черной магии, Она же ActionScript:
Как заставить выполнится произвольную текстовую переменную ?
Сделать можно все. Можно и это.
Пишем для начала жесткую функцию
function doCommand(command){
clp="this.mc";
param="_x";
zn=500;
eval(clp)[param]=zn;
}
Проверяем:
docommand(command);
Работает.
Стал быть, остается проанализировать входную строку и выделить из нее имя клипа, наименование параметра, действие и значение ( в примере это все было зашито жестко).
1.Имя клипа. Хорошо, если в руте. Если где-то внутри? Если mc.mc1.mc2._x=100? Надо анализировать. Допустим, справились.
2.Параметр. _x, _y,_rotation и черт его знает, что еще. Ну, как правило, начинается с подчеркивания. Значит, все, что до него было - имя. mc.mc1.mc2. - имя (надо еще последнюю точку убрать).Все, что после и до действия - одного из довольно ограниченного набора символов - параметр.
3.Действие. Вычленяешь из строки оператор - это м.б. =,+.-,++.--.>>, далее - везде.
4.значение. Все, что от строки останется.
Делаешь оператор сравнения по выбранной подстроке действия и переписываешь самое последнее выражение в функции - напр,
if (deistvie=="="){eval(clp)[param]=zn}
else if deistvie=="*="){eval(clp)[param]*=zn}
else и т.д., и т.п.
Всего-то делов - перебрать все возможные варианты.
И все это роскошество вместо одного единственного варианта напрямую. Но - дерзай, этот путь работать будет. Такие вот бананы!
Nox Noctis
11.12.2001, 15:45
ну давайте напишем транслятор ActionScript'а на ActionScript'е...
...уколдуетесь, друзья мои :o
Можно и ухо через (пардон) задницу чесать, но стоит ли?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.