我有這樣的功能:如何傳遞字符串在tcl中的功能?
proc test { {isSet "false"} } {
if {isSet == "true"} {
# do something
}
}
但是當我把這個PROC,如何傳遞false
或true
:
test "false" or test false?
我有這樣的功能:如何傳遞字符串在tcl中的功能?
proc test { {isSet "false"} } {
if {isSet == "true"} {
# do something
}
}
但是當我把這個PROC,如何傳遞false
或true
:
test "false" or test false?
你這樣做是錯誤的(忽略你的事實在您的if
條件表達式中使用裸字isSet
將不起作用)。相反,做
proc test {{isSet "false"}} {
if {$isSet} {
# do something
}
}
這將允許你打電話給你test
PROC但是你想:
test 0
test 1
test [expr {1 == 0}]
test yes
test false
test "no"
test {true}
test "off"
等…
其基本思想是,Tcl解釋將嘗試解釋包含在isSet
變量作爲布爾類型的值的值;有一套規則可以做到這一點:
yes
,true
或on
條件之一;no
,false
或off
之一的字符串是錯誤的。施加用於解釋的字符串作爲布爾值的規則在Tcl_GetBoolean()
manual中描述。
你正在做在你的假設另一個錯誤:TCL沒有明確的字符串和布爾類型(因爲它是無類型),所以"false"
和false
是完全一樣的事情,當時的Tcl解釋它分析你的腳本在Tcl 中使用雙引號和大括號來分組,不用於指定文字類型(而Tcl沒有文字)。所以我建議從the tutorial開始,以便更好地掌握這些想法。我提到
的類型,當我描述的值解釋爲布爾是內部的Tcl值,且用戶不可見—是,內部的Tcl緩存,所以當你做set x [expr {1 + 2}]
,內部價值分配到相應值的「原生」表示x
將有一個整數類型,但這實際上是一個實現細節。
+1另一種可能性是使用'string is boolean','string is true'和'string false''在某些組合中。我會注意到,它們在解析用戶值時非常有用(其中「you betcha!」是輸入的明顯可能性),而不是來自程序的值。 –
兩者都很好,但測試「錯誤」更正確。 – TrojanName