2014-11-21 53 views
0

新的TCL和運行到一個短路問題似乎。來自vbscript,我能夠正確執行此操作,但試圖轉換爲TCL腳本,我遇到了短路副作用的問題,並一直試圖找到正確的方法來做到這一點。TCL如何要求兩個操作數來確定結果在IF語句

在下面的代碼片段中,我只想在兩邊都爲真的情況下執行「執行某些操作」,但由於短路,只會在第一個參數無法確定表達式的值時評估第二個參數。

if {$basehour != 23 && $hours != 0} { 
     do something 
    } 

也許我不是在尋找正確的東西,但到目前爲止我一直無法找到解決方案。任何提示將不勝感激。

回答

0

&&運營商總是在Tcl中發生短路(正如在C和Java以及其他一些語言中所做的那樣)。如果你想要另一個版本,並且可以保證這兩個子表達式都產生布爾值(例如,它們來自相同的測試,比如你正在做的),那麼你可以使用&運算符來代替,並且會執行你在工作時需要bools。如果你這樣做,明智的做法是在子表達式周圍加上括號;儘管每個人都記得==相對於&&的優先級,但是命令w.r.t. &經常被人遺忘。 (括號在執行成本方面是免費的。)

if {($basehour != 23) & ($hours != 0)} { 
    do something 
} 

但是,通常不需要這樣做。如果你想要一個AND進行布爾測試(例如,if命令的表達式),那麼沒有理由不像在原始代碼中一樣短路;如果第一個子句給出假,第二個子句不會改變整個表達式產生的值。