我得到一個錯誤:Tcl錯誤的「如果」分支
invalid command name "tcl::mathfunc::expr"
試圖如果代碼分支下面。 $ env(EXB_DESIGN_NAME)的值被設置爲「seville2」。我想代碼不應該分支到'如果'條件。
if {expr("$env(EXB_DESIGN_NAME)" ne "seville") || expr("$env(EXB_DESIGN_NAME)" ne "seville2")} { -------}
我得到一個錯誤:Tcl錯誤的「如果」分支
invalid command name "tcl::mathfunc::expr"
試圖如果代碼分支下面。 $ env(EXB_DESIGN_NAME)的值被設置爲「seville2」。我想代碼不應該分支到'如果'條件。
if {expr("$env(EXB_DESIGN_NAME)" ne "seville") || expr("$env(EXB_DESIGN_NAME)" ne "seville2")} { -------}
這就是你應該寫它(引號是可選的這裏也爲變量):
if {"$env(EXB_DESIGN_NAME)" ne "seville" || "$env(EXB_DESIGN_NAME)" ne "seville2"} {
#Do something
}
如果你絕對要使用expr
雖然(不是很必要在這裏,因爲if
使用expr
),這將是類似的東西:
if {[expr {"$env(EXB_DESIGN_NAME)" ne "seville"}] || [expr {"$env(EXB_DESIGN_NAME)" ne "seville2"}]} {
#Do something
}
或
if {[expr {"$env(EXB_DESIGN_NAME)" ne "seville" || "$env(EXB_DESIGN_NAME)" ne "seville2"}]} {
#Do something
}
但是我不會推薦寫這樣的代碼,因爲它是用if
來寫的,因爲用我提到的第一種方式編寫它就簡單多了。
如果你有大量的字符串來檢查,你可能會使用ni
(對於「不是」):
set mylist {"seville" "seville2"}
if {$env(EXB_DESIGN_NAME) ni $mylist} {
#Do something
}
TCL在表達式轉換功能整合到呼叫在tcl::mathfunc
命名空間中的等效命令。
但是,您真正的問題是您正在使用expr
作爲已經是表達式的上下文中的函數!你不需要那種複雜性。這意味着我們可以改變:
if {expr("$env(EXB_DESIGN_NAME)" ne "seville") || expr("$env(EXB_DESIGN_NAME)" ne "seville2")} { -------}
到:
if {$env(EXB_DESIGN_NAME) ne "seville" || $env(EXB_DESIGN_NAME) ne "seville2"} { -------}
這是短。它更清晰。這是正確的...
'interp alias {} :: tcl :: mathfunc :: expr {} return -code ok' could also fix that problem。但我認爲這是一個壞主意。 –
順便說一句,至少這些'ne'關係中的一個將始終爲真,這導致整個if語句總是成立。 –
這是正確的彼得,我已經改變了邏輯或爲邏輯與。謝謝。 – user3565150