Hallo alle,
Ich habe ein einfaches Beispielskript. Kann mir jemand erklären, was die Bereiche für die Variablen hier sind und warum es auf die eine und nicht auf die andere Weise funktioniert?
Hier ist das ursprüngliche Skript:
Names default to here(1);
Clear Globals();
x="Variable";
exprA = Expr(Write("Here is variable: "||x));
exprB = Expr(
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );dt1 << OnClose(exprA));
exprB;Die Idee ist, dass ich eine Tabelle öffne und ihr einen Ausdruck gebe, den sie ausführen muss, wenn sie geschlossen ist. Ausdruck wertet aus und ändert (nicht in diesem Beispiel) einige Variablen aus dem Skript.
So wie es geschrieben ist, funktioniert es nicht - nichts passiert, aber in meinem echten Skript heißt es nur, dass es keine Referenz finden kann.
Okay, versuchen wir, ExprA global zu machen:
Names default to here(1);
Clear Globals();
x="Variable";
::exprA = Expr(Write("Here is variable: "||x));
exprB = Expr(
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );dt1 << OnClose(exprA));
exprB;Jetzt sieht es den Ausdruck, aber es funktioniert immer noch nicht, weil es jetzt die x-Variable nicht sieht.
Ok, machen wir x auch global:
Names default to here(1);
Clear Globals();
::x="Variable";
::exprA = Expr(Write("Here is variable: "||x));
exprB = Expr(
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );dt1 << OnClose(exprA));
exprB;Jetzt funktioniert es:
Scriptable[]Here is variable: Variable
// Close Data Table: Big Class
Close( "Big Class" );
Die Frage: Warum funktioniert es so und nicht auf dem ursprünglichen Weg? Ich sah zu mir, es hätte funktionieren sollen.
Ich mag es nicht, globale Variablen in diesem Skript zu verwenden - gibt es eine andere Möglichkeit, damit es funktioniert?