Il comportamento dell'ambito variabile per print() dovrebbe corrispondere a tutto il restoCosa ha ispirato questa richiesta nella lista dei desideri?
Ho passato un sacco di tempo a risolvere un problema con l'ambito delle variabili. Se si usa `{default local}` all'interno di una funzione (cosa che faccio quasi sempre), la funzione non può accedere alle variabili globali a meno che l'ambito non sia specificato esplicitamente con `::` (cosa che non sapevo). Tuttavia, `Print()` cerca silenziosamente le variabili anche senza `::` e, dato che `Print()` è uno strumento di debug piuttosto basilare, questo crea molta confusione!
Quale miglioramento vorresti vedere?
Print() dovrebbe comportarsi allo stesso modo in termini di ambito delle variabili di tutto il resto
Perché questa idea è importante?
Il comportamento attuale è illogico e incoerente.
JMP19.1.1.
Automazione e scriptingOggetto: Re: Il comportamento dell'ambito variabile per print() dovrebbe corrispondere a tutto il resto - Stato modificato in: Richiede informazioniCiao @JohnJoyceFlusso , grazie per aver inviato la richiesta. Potresti fornirci uno script che illustri questo comportamento?
Oggetto: Il comportamento dell'ambito variabile per print() dovrebbe corrispondere a tutto il restoEcco uno script minimo che illustra il problema: Print() funziona, ma msgbox() no.
Nota: non si tratta di una funzione utile, ma serve solo a dimostrare il problema.
Sfortunatamente, Print() si comporta in modo diverso da tutte le altre funzioni per quanto riguarda l'ambito delle variabili.
Non ho mai incontrato un'altra lingua che faccia una cosa del genere. Sembra un difetto.
Il mio suggerimento è che Print() non dovrebbe essere diverso da tutto il resto.
dummy = "Hello";
test = Function( {},
{default local},
Print( dummy );
msgbox( dummy );
);
test();
Oggetto: Il comportamento dell'ambito variabile per print() dovrebbe corrispondere a tutto il restoMi scuso per la confusione creata con msgbox(), che in realtà è una mia implementazione e non una funzione integrata.
Ecco un esempio che illustra il mio punto... il primo tentativo con i pulsanti radio non mostra alcuna opzione, poiché "options" non è definito localmente; eppure print() può magicamente accedervi.
Una volta definite le opzioni localmente, gli stessi pulsanti di opzione funzionano correttamente anche la seconda volta.
Il punto è che print() non dovrebbe comportarsi in modo diverso da qualsiasi altra funzione, altrimenti il suo utilizzo come strumento di debug risulterebbe alquanto problematico.
options = {"A", "B"};
test = Function( {},
{default local},
Print( options );
New Window( "Pick one",
<
<MODAL></MODAL>
<BR /> <BR />
Oggetto: Il comportamento dell'ambito variabile per print() dovrebbe corrispondere a tutto il resto@JohnJoyceFlusso
È ancora possibile accedere alla variabile "options" dall'interno della funzione utilizzando eval( eval expr() ). Questo funziona per me:
options = {"A", "B"};
test = Function( {},
{default local},
Print( options );
eval( eval expr( New Window( "Pick one",
<
<MODAL></MODAL>
Oggetto: Il comportamento dell'ambito variabile per print() dovrebbe corrispondere a tutto il restoGrazie, sì, funziona (così come l'accesso a 'options' tramite ::options, come mi hanno fatto notare gli addetti all'assistenza).
Il mio problema rimane il fatto che Print() si comporta in modo diverso da tutto il resto, il che è illogico.