2015-01-09 32 views
2

簡單的問題,TCL給了我「過早結束表達式」,因爲三元表達式的最後一個參數是一個空字符串。如果它是其他的東西,那麼它工作正常。我可以在這裏使用空字符串嗎?TCL三元運算符不喜歡空字符串

set y 5 
set x [expr ($y > 1) ? 1 : ""] 

回答

7

你應該總是給expr一個單一的,完整的表達式,用大括號括起來作爲參數。這可以避免包括這一個問題在內的一系列問題。

expr {$y > 1 ? 1 : ""} 

的問題是,expr會將其參數得到表達。調用concat $y > 1 ? 1 : ""給出字符串「5> 1?1:」,這不能被expr解析。

+0

我永遠不會理解TCL,但那是行得通的:-) – MikeKulls

+2

@MikeKulls:永遠不要說永遠。 Tcl很難習慣,因爲它不會像其他語言那樣聰明。有一些硬性規則和快速規則,並且它們總是適用。一旦你學會明確表達自己的意思,你就會與Tcl相處得很好,而且你會發現用其他語言設計程序也更容易。 –

+0

我不得不說我覺得很困惑。例如,今天這個代碼對我來說是失敗的'如果{$ x eq Tx} {doSomething}'。其他字符串不需要引用,文檔甚至說不使用引號。 – MikeKulls