ho tutti questi versione di Tcl/Tk 8.1 programmi che sono diventato rotto perché Tcl/Tk 8.5.10 non sta gestendo correttamente conversioni stringa/numeriche.
Qui, guscio in Tcl, e digitare:
% expr {01}
1
(e così via ..)
% expr {06}
6
% expr {07}
7
e poi si arriva a 8 ...
% expr {08}
missing operator at "[email protected]_"
sembra un numero ottale non valido
Ma io t peggiora. Ancora in guscio Tcl, provate questo:
nel mio guscio Tcl8.1:
% format "%.0f" {08}
8
Ma nel mio nuovo e migliorato Tcl8.5 shell, ottengo un errore:
% format "%.0f" {08}
expected floating-point number but got "08" (looks like invalid octal number)
Questo è solo stupido! Ho tutto questo codice che funziona bene in Tcl7.6 e Tcl8.1, ma che ha iniziato a dare risultati strani, casuali in Tcl8.5. Solo quando il numero 08 è successo a generato o utilizzato! Ho passato ore a cercare di capire il problema. Ma si scopre che è solo uno sgradevole sacco del codice che sto usando!
Quindi, sto inviando questo sproloquio come un avvertimento.
Tcl/Tk versione 8.5.10 gestisce il numero otto in modo errato. Se si è in attesa di un comportamento corretto dalle istruzioni di formato, questo non si verificherà. Il codice volerà lungo, finché non incontra una stringa del valore di {08}, e l'interprete Tcl 8.5.10 genererà un errore, perché si assume che {08} è una speciale-caso ottale numero, indipendentemente dal fatto che tutti gli altri piccoli numeri abbiano funzionato bene!
Una possibile soluzione al problema sopra menzionato è il downgrade a una shell Tcl 8.1 . Ho confermato che tale versione gestisce almeno le istruzioni del formato per il numero 08 in modo corretto. La shell Tcl 8.5.10 semplicemente no.
fonte
2011-10-15 07:41:15
Multilinea, sì, ma la raccomandazione "scansione" è la più compatta e facile da capire che ho visto. "set b [scan b% d]" soddisfa le mie esigenze. Il resto del forceInteger proc è dedicato alla convalida dell'input difensivo. –