Ciao a tutti,
Ho un semplice script di esempio. Qualcuno può spiegarmi quali sono gli ambiti per le variabili qui e perché funziona in un modo e non in un altro?
Ecco lo script iniziale:
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;L'idea è che apro il tavolo e gli do un'espressione che deve funzionare quando è chiuso. Expression valuta e modifica (non in questo esempio) alcune variabili dello script.
Il modo in cui è scritto non funziona - non succede nulla, ma nel mio vero script dice semplicemente che non riesce a trovare un riferimento.
Ok, proviamo a rendere ExprA globale:
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;Ora vede l'espressione, ma continua a non funzionare, perché ora non vede la variabile x.
Ok, rendiamo anche x globale:
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;Ora funziona:
Scriptable[]Here is variable: Variable
// Close Data Table: Big Class
Close( "Big Class" );
La domanda: perché funziona in questo modo e non funziona nel modo iniziale? Ho pensato che avrebbe dovuto funzionare.
Non mi piace usare le variabili globali in questo script: qualche altro modo per farlo funzionare?