Autor Zpráva
Zeree
Profil *
mam cyklus for (i=0; i<10; i++) ,a pole[10] ..naplnene prvkami ako napr. "a" ,"b" ,"c","d"... ,a nazov objektu je "meno"
potrebujem dosiahnut nastavenia premennych s nazvami ktore su ulozene v poli:

eval("_root."+meno).a = 1;
eval("_root."+meno).b = 1;
eval("_root."+meno).c = 1;
eval("_root."+meno).d = 1;
...

lenze ako prinutit flash aby za evalom (a za bodkou) dal premennu ktora sa nazyva tak ako je v poli: "pole[i]"
-staci mi zapis ako to urobit pre jeden
-predpokladal som ze to bude : eval("_root."+meno).eval(pole[i]) //lenze flash to vyhodnocuje ako zly zapis

Dakujem za akykolvek navrh ako to sfunkcnit.
Steve
Profil
a co takhle:
eval("_root." + meno + "." + pole[i]) = neco
Zeree
Profil *
JJ dobry napad , ale praveze aj to hlasi chybu :
Left side of assignment operator must be variable or property.
..treba to odskusat , ja som skusal vela kombinaciji avsak ziadna nesla :(
FlashManiac
Profil
posli zdrojak.. z toho tveho vykladu jsem ponekud jelen..nevim co je a neni objekt a kde je umistene to pole atd.
Zeree
Profil *
Vytvoril som nazorny priklad ,kedze moj kod obsahuje velky pocet premennych a zamerani ,nechcem ta popliest ,ale princip je takyto:

meno = "mc";
eval("_root."+meno).zivot = 0;
eval("_root."+meno).sila = 0;
eval("_root."+meno).energia = 0;
eval("_root."+meno).obnova = 0;
stats = new Array("zivot","sila","energia","obnova") ;

for (i=0; i<stats.length; i++) {
//kazdy stat by sa mal navysit o "i" ,takze by jednotlive artributy mali byt 0,1,2,3
//eval("_root."+meno).stats[i] += 10; //predpokladany ,ale nefunkcny kod
//<?> miesto pre potrebny kod
}
//natvrdo vypisanie
trace(_root.mc.zivot); //vypis by mal byt 0
trace(_root.mc.sila); //vypis by mal byt 1
trace(_root.mc.energia);//vypis by mal byt 2
trace(_root.mc.obnova); //vypis by mal byt 3
Zeree
Profil *
// ten jeden riadok by nebol 10 ale "i" ,ved ide o princip //eval("_root."+meno).stats[i] += i;
//pardon ze for neodsadilo , som tam dal "taby" a tie to vynechalo
Zeree
Profil *
Prisiel som na to {po 1 hodine hladania}
eval ako taky nedovoluje zlucovanie odkazu za nim s premennymi ,to znamena v skratke ze to co je za evalom moze byt len to co je napisane ,a nemoze to byt dynamicky za behu dotvarane napr. polom ,je tomu tak preto pretoze kompilator riadok kde je eval vyhodnoti ako celok s tym co je za zatvorkou , je to logicke lebo v case prekladania ,ziadne pole este nieje ani vytvorene v Ramke
,ide to obist tymto sposobom zadavania :

set ("_root."+meno+"."+stats[i], 200); //miesto 200 moze byt "i"

toto vyhodnoti prvu cast , ktoru zluci ,ked je zlucena az potom ju zameriava a nastavuje , kdezto eval robi to iste iba pre to co je v zatvorkach ,toto to robi takpovediac aj pre to za zatvorkou ,s tym ze sa to najprv prelozi takze je mozne zadat dynamicky napr. pole.

... Moc diky za vsetku snahu ,prajem pekny den.
XXX
Profil
Zeree
Nechapu, proc pouzivas funkci eval, je v 99% naprosto zbytecna a jde to vzdycky vyresit jinak. Tady mas sve reseni:
meno = "mc";
_root[meno].zivot = 0;
_root[meno].sila = 0;
_root[meno].energia = 0;
_root[meno].obnova = 0;
stats = new Array("zivot", "sila", "energia", "obnova");
for (i=0; i<stats.length; i++) {
	_root[meno][stats[i]] += i;
}
trace(_root.mc.zivot); // 0 
trace(_root.mc.sila); // 1 
trace(_root.mc.energia); // 2 
trace(_root.mc.obnova); // 3
Zeree
Profil *
mas pravdu , ide to aj tak , o sposobe _root[meno][stats[i]] += i; som vobec nevedel , hoci _root[] vyuzivam

Ano ,ide o pekny a rychly zapis ,lenze ked obsahuje kod privela kombinaciji "zlucovania" niecoho s textom ,tj. sa za urcitych podmienok pridava k "meno" -dalsi kod ,napr. _root.meno5_2_image[5] ,{v tomto ide o fakt skaredy zapis ,ktory by sa zle riesil cez _root[] //nehovorim ze by to neslo ,ale skratka na eval som si zvykol ,pretoze ma intuitivny zapis ,a funguje stale ,bez zmien v zapise , {kedze vyuzivam viac zapisov , pre vsetky eval funguje {pripadne staci zmenit par pismen} ,avsak _root[] by bol v niektorych pripadoch zapisany odlisne pripadne kombinaciou

napriklad neviem si predstavit ako by som moj vysledny zapis zapisal "lahko" pomocou _root[]-ov

set("_root."+meno+"."+stats[j], get("_root."+meno+"."+stats[j])+get("_root.item_" + index + "_"+stats[j]));

ano nieco by sa tam zjednodusilo ,konkretne zmena getu ,neviem ,z mojho pohladu by to cez _root[] bolo skaredsie a dlho sa zamyslat nad spravnostou ,mozno sa mi to zda aj pre to ze som odjakziva pouzival eval takze som na neho zvyknuty.
Zeree
Profil *
a neviem ci ide zlucit cez _root[] daco take aby bolo mozne zamerat daco taketo: _root.a__0
_root[meno+"__"+i] ? asi takto nie , neviem , pripadne necham si poradit ,ak je sposob ako.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: