Sembra che tu ti stia avvicinando un po '. In primo luogo, si probabilmente non si desidera utilizzare expr
all'interno la condizione if
, quindi questo sarà sufficiente:
if { $Node_3 eq "BadAngle" } {
return "BadAngle"
}
Dal momento che una delle cose che si stanno confrontando contro è sicuramente non numerico, sarete bene usando l'operatore eq
sebbene l'operatore ==
sia equivalente. L'unica volta che c'è una differenza è quando entrambi gli operandi assomigliano ai numeri, quando ==
li confronta come numeri (analizzandoli in numeri se necessario). Ciò significa che "1" == "0x01"
nonostante siano stringhe piuttosto diverse; l'operatore eq
si confronta sempre come stringhe.
Come scegliere quale è il migliore? In realtà è piuttosto semplice: pensi di lavorare con i numeri a questo punto su entrambi i lati del confronto? In caso affermativo, utilizzare ==
e utilizzare altrimenti eq
.
L'unica volta che si desidera utilizzare expr
all'interno if
è quando si sta selezionando in modo dinamico l'operatore. Questo non è veramente raccomandato, ma lo farebbe in questo modo:
set op "=="
if { [expr {$Node_3} $op {"BadAngle"} ]} {
return "BadAngle"
}
È piuttosto brutto. (Si noti che ho messo tutto il resto all'interno delle proprie parentesi per evitare una doppia valutazione, e sto attento a bilanciare correttamente tutte le parentesi, che è quello che ti ha incastrato nel codice della tua domanda.) Non farlo a meno hai davvero bisogno di .
fonte
2013-07-17 10:22:25
Inoltre, 'Inf' e' NaN' sono numerici (sebbene quest'ultimo sia probabilmente un errore controllato molto presto in seguito, i NaN sono cose strane) in base all'aritmetica in virgola mobile TCL e IEEE. –