Sono sicuro che questo sia già stato pubblicato da qualche parte, ma non sono riuscito a trovarlo.
Sono confuso su come viene gestito l'ambito delle variabili in JSL.Qualcuno potrebbe aiutarmi a chiarire come funziona.
Uso quasi sempre i come variabile di indicizzazione per i loop.Ad esempio, nel mio script avrò un ciclo for con i come indice che chiama un'altra funzione.In questa funzione c'è un altro ciclo for con i come indice.Questo non è mai stato un problema in C/Java/etc.Sembra che a volte funzioni in jsl e altre volte no.Non ho un esempio perché non sono riuscito a capire esattamente dove si verifica il problema.Penso però che sia una comprensione di base della portata delle variabili in JSL.
In JSL, una variabile, usiamo il tuo esempio di una variabile chiamata "i" come viene descritta come
spazio dei nomi:i
Se non viene specificato nulla per impostare uno spazio dei nomi, la specifica formale è:
::io
Poiché lo spazio dei nomi predefinito in JSL è uno spazio dei nomi chiamato ":"......piuttosto strano, ma ci sono ragioni storiche per questo.Quindi se entri
io = 7;
Ciò che JMP vede è:
::i = 7;
Quindi, ora se in qualsiasi parte di uno script JSL, la variabile i viene modificata, e poi si fa riferimento in seguito, avrà il nuovo valore
showit = Function( {I},
Show(I);
);
I = 2;
showit(I);
I=3;
showit(I);
ritorna
I = 2;
I = 3;
Ora, una funzione può isolare una variabile, rendendo la variabile locale alla funzione
showit = Function( {I},{I},
I=55;
Show(I);
);
I = 2;
showit(I);
show(i);
Il risultato di questo codice è:
I = 55;
i = 2;
notare che il valore di i per il suo uso globale non è cambiato.
Ora un po' di confusione finale:
Quando ho detto che il valore di i può essere modificato e che tutti gli usi successivi di i rifletteranno tale cambiamento, ciò significa che verrà modificato anche nei diversi script eseguiti.Pertanto, se viene eseguito un nuovo script che contiene la variabile i, avrà il valore i impostato nello script JSL precedente.Pertanto, l'istruzione "Names Default to Here( 1 );" è stato implementato.Questa affermazione fa 2 cose.Innanzitutto, cambia lo spazio dei nomi da ":" a "Qui".In secondo luogo, isola tutte le variabili nello spazio dei nomi "Qui" solo alle variabili nello script che viene eseguito.Quindi ora, se hai il seguente script
Names Default to Here( 1 );
i = 7;
questa istanza della variabile i verrà modificata solo mediante l'utilizzo di i all'interno dello script.....nessun altro script avrà accesso alla modifica di quella variabile i.
PS La descrizione formale della variabile i è:
qui io
e qualsiasi variabile nello script creata nello script, dopo "Names Default to Here( 1 );" verrà automaticamente inserita nella chiamata dello spazio dei nomi Here.
Names Default to Here( 1 );
i = 7;
show(here:i)
Non posso usare "here:" per indirizzare esplicitamente le variabili nello spazio dei nomi here?
Perché gli indirizzi delle colonne sono ad esempio " :sesso ".
Uno spazio dei nomi vuoto significa: " tabella dati corrente() "?