Esiste un modo per sostituire Eval(Parse(Eval Insert())) durante la creazione di nomi di variabili in movimento?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ogni volta che provo a creare variabili nei cicli, ho sempre utilizzato Eval, Parse e Eval Insert. Di seguito è mostrato un esempio
For(i=0 , i < N Table(), i++,Eval(Parse(Eval Insert("Variable^i^"))));Il metodo sopra funziona bene, ma man mano che gli script diventano enormi, sempre più variabili e operazioni devono essere messe tra virgolette, il che rende il debug davvero difficile. Esiste un altro modo per creare variabili in movimento, oltre al metodo Eval, Parse, Eval Insert?
Ri: C'è un modo per sostituire Eval(Parse(Eval Insert())) durante la creazione di nomi di variabili in movimento?L'unico modo in cui so come sbarazzarmi di eval (al momento) è usare il metodo di Ian, che rende il debug un po' migliore. Perché mi sono reso conto che gli errori che si verificano all'interno delle cose che valuto non vengono visualizzati nel registro, il che rende il debug un po' più difficile...
Ri: C'è un modo per sostituire Eval(Parse(Eval Insert())) durante la creazione di nomi di variabili in movimento?Dovevo solo fare qualcosa di simile e una serie di espressioni ha funzionato.Non scappare da eval Anche se.Ecco un esempio di codice che illustra le cose:
tb_expr = {} ;
tb_expr [ 1 ] = espr ( hlistbox ( casella di testo ( "1: " ) , casella di testo ( "Il primo" ))) ;
tb_expr [ 2 ] = espr ( hlistbox ( casella di testo ( "2: " ) , casella di testo ( "Il secondo" ))) ;
tab_expr = espr (
scheda_test << sostituire ( 1 , "Scheda di prova" , eval ( tb_expr [ indice ])) ;
) ;
nw = nuova finestra ( "test" ,
hlistbox ( scatola dei bottoni ( "Uno" ,
indice = 1 ;
tab_expr ;
) ,
scatola dei bottoni ( "Due" ,
indice = 2 ;
tab_expr ;
) ,
) ,
scheda_test = casella della scheda ( "Scheda di prova" , eval ( tb_expr [ 1 ]))
) ;
Ri: C'è un modo per sostituire Eval(Parse(Eval Insert())) durante la creazione di nomi di variabili in movimento?Non sono a conoscenza di alcun elenco del genere, purtroppo. Ma presto saprai se non funziona!
Ricordo che (con JMP 10 credo), lo 'SliderBox{}' non era sottoscrivibile, quindi ho dovuto fare un po' più di lavoro. Questo potrebbe essere stato risolto successivamente.
Ri: C'è un modo per sostituire Eval(Parse(Eval Insert())) durante la creazione di nomi di variabili in movimento?Ciao Ian,
Grazie per aver indicato che il metodo di memorizzazione dei displayBox in un elenco. Proverò quelli per le caselle combinate invece delle caselle di modifica dei numeri. A proposito. Sai dove posso ottenere un elenco completo delle caselle di visualizzazione che sono sottoscrivibili?
Ri: C'è un modo per sostituire Eval(Parse(Eval Insert())) durante la creazione di nomi di variabili in movimento?Questo potrebbe darti un indizio. Alcune (ma, l'ultima volta che ho controllato, non tutte) le caselle di visualizzazione hanno un lvalue indicizzabile:
NamesDefaultToHere ( 1 ) ;
// Crea un'interfaccia utente "dinamica". . .
N = 6 ;
lub = LineUpBox ( NCol ( 1 )) ;
nebs = {} ;
Per ( io = 1 , io <= N , io ++,
Inserire ( nebs , NumeroEditBox ( . )) ;
lub << Aggiungere ( nebs [ io ]) ;
) ;
nw = Nuova finestra ( "Elenco delle caselle di modifica dei numeri" , lub , ButtonBox ( "OK" , OKscript )) ;
// Ottieni i valori di input dell'utente quando viene premuto 'OK'. . .
OKscript =
Espr (
nw << chiudi la finestra ;
Per ( io = 1 , io <= N , io ++, Stampa ( nebs [ io ] << Ottenere ))
) ;
Ri: C'è un modo per sostituire Eval(Parse(Eval Insert())) durante la creazione di nomi di variabili in movimento?Se hai molte variabili, forse una lista o una struttura a matrice aiuterebbe?O un array associativo?
Ri: C'è un modo per sostituire Eval(Parse(Eval Insert())) durante la creazione di nomi di variabili in movimento?Un esempio potrebbe essere, voglio creare una quantità uguale di questo qui sotto...

per ogni tabella di dati aperta, quindi la quantità di caselle combinate o caselle pulsanti create ogni volta varierebbe in base alla quantità di tabelle di dati aperte.
E ho una variabile assegnata a ciascuna casella combinata e casella dei pulsanti per scopi di tracciamento (e deve essere lì). Quindi questo non mi lascia altra scelta che creare una variabile usando Eval, Parse e Eval Insert ogni volta in modo da avere una variabile che tiene traccia di ogni Combo/Button Box che creo.
Eval( Parse( Eval Insert( " if(DTopened > 1, lbBB^i^ = Border Box( H List Box( dtListBox^i^ = Combo Box( listofdtnames ), Picture Box( img ), Combo Box( test ), BBox^i^ = Button Box( \!"Fetch Temperature\!" ) ) ); " ) ) );
C'è un modo per eliminare Eval, Parse ed Eval Insert e usare qualcosa di più semplice?
Modifica: ho dimenticato di menzionare che il codice si trova all'interno di un ciclo for con il ciclo variabile "i".
Ri: C'è un modo per sostituire Eval(Parse(Eval Insert())) durante la creazione di nomi di variabili in movimento?JSL supporta numerosi modelli di progettazione, alcuni forse non ovvi. Potresti fornire un esempio più specifico di quando vuoi "creare variabili in un ciclo", che indichi anche il passaggio successivo di come vorresti effettivamente utilizzare tali variabili?