Thema: eval + variablen = ERROR!? Fr Mai 21, 2010 1:54 am
Hallo,
ich habe folgenden Code der Entwicklerdoku zum Befehl "eval" entnommen und getestet:
Code:
var v1, v2, v3, v4, v5; for(var i = 1; i <= 5; i++) eval( Format("v%d = %d", i, i * i) );
In meinen Script eingebaut, sieht das so aus:
Code:
protected func Initialize(){ var v1, v2, v3, v4, v5; for(var i = 1; i <= 5; i++){ eval(Format("v%d = %d",i,i*i));} Log("%d %d %d %d %d",v1,v2,v3,v4,v5); return(1);}
Nur Blöd, dass die Engine mir immer folgendes in die Log schreibt:
Code:
ERROR: unknown identifier: v1 (eval in D:\Gamez\Clonk Rage\NEW.c4d\Script.c:0:2) ERROR: unknown identifier: v2 (eval in D:\Gamez\Clonk Rage\NEW.c4d\Script.c:0:2) ERROR: unknown identifier: v3 (eval in D:\Gamez\Clonk Rage\NEW.c4d\Script.c:0:2) ERROR: unknown identifier: v4 (eval in D:\Gamez\Clonk Rage\NEW.c4d\Script.c:0:2) ERROR: unknown identifier: v5 (eval in D:\Gamez\Clonk Rage\NEW.c4d\Script.c:0:2) 0 0 0 0 0
Wie man sieht ist das Ergebnis "0 0 0 0 0". Es sollte laut Entwicklerdoku aber "1 4 9 16 25" lauten. Noch dazu erscheinen eine menge ERROR logs die mir deutlich sagen, dass die Engine die Variablen im Befehl "eval" nicht identifizieren kann.
Nun meine Frage:
Kann mir einer sagen, wie ich diesen Fehler beheben oder Umgehen kann? Der Clue soll in meinem fertigen Script nämlich sein, dass Variabelen dessen Namen, sich bei laufendem Spiel, aus 2 Strings Mithilfe "Format()" zusammensetzen, inizialisiert werden.
Wäre schön wenn mir da jemand helfen könnte^^
Zuletzt von TheNewGuy am Fr Mai 21, 2010 6:55 pm bearbeitet; insgesamt 1-mal bearbeitet
omg, wie hab ich das denn geschafft da minus zu voten -.- weiss nicht wie das passiert ist, sry, muss auf enter gekommen sein und das minus war wohl grad markiert oder so. tut mir leid.
Ich vermute mal die Variablen sind falsch deklariert, aber genaueres weiss ich da sonst auch n icht.
Hast du zufällig #strict 2? Das akzeptiert Variabeln mit Zahlen nur dann, wenn sich die Zahlen in der Mitte befinden. Zahlen am Anfang und Ende verursachen einen Error. v1v, v2v etc hingegen würden dann funktionieren. Bei #strict funktioniert es so noch, was aber wahrscheinlich aus Bug-Gründen entfernt wurde.
Edit: Hm, iwie gehts doch nicht, habs grad mal getestet. Habs allerdings mit VarN hinbekommen:
Code:
protected func Initialize(){ var v1v, v2v, v3v, v4v, v5v; for (var i = 1; i <= 5; ++i) VarN(Format("v%dv", i)) = i*i; Log("%d %d %d %d %d", v1v, v2v, v3v, v4v, v5v); return 1; }
Also erstmal danke: mit VarN() komme ich erstmal weiter Aber ich muss dir wiedersprechen: #strict 2 hat bis jetzt alle meine Bennanten Variablen mit dem Zähler am Ende akzeptiert... Außerdem bin ich gerade auf den Fehler gestoßen in dem ich diesen Script getestet habe:
ERROR: unknown identifier: vTest (eval in D:\Gamez\Clonk Rage\_NEW.c4d\Script.c:0:5) Die Funktionslokale = 0 Die Objektlokale = 1 Die Globale = 1
Die Vermutung liegt nahe, dass eval() nicht mit Funktionslokalen arbeiten kann. Schade nur, dass dies Bezüglich in der Entwicklerdoku nicht nur eine Anmerkung fehlt, sondern sogar noch ein falsches Beispiel gegeben wird.
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
jap war gleich meine erste Vermutung. Habe es sogar ohne #strict getestet, in allen 3 Fällen wirft die Engine...
Die Funktionslokale = 0 Die Objektlokale = 1 Die Globale = 1
...herraus
Gurkenglas Oberst
Anmeldedatum : 04.01.09
Thema: Re: eval + variablen = ERROR!? Sa Mai 22, 2010 11:39 pm
Wenn du Variablen gleichen Namens durchnummerieren willst, benutz Arrays.
Ein Array ist sozusagen ein Variablenfeld, zB [3,5,8,7].
Du kannst Elemente dieses Arrays abrufen indem du dahinter in [] die nummer des elements hinschreibst, es wird 0,1,2 gezählt! [3,8,4][2] wäre also 4.
zB kannst du schreiben:
Code:
protected func Initialize() { var v=[]; //Leerer Array, du kannst auch CreateArray(); benutzen oder CreateArray(5); für Länge 5, etwas effizienter. for(var i;i<5;i++) v[i]=i*i; Log("%d %d %d %d %d",v[0],v[1],v[2],v[3],v[4]); }