我有这样的功能:
proc test { {isSet "false"} } {
if {isSet == "true"} {
# do something
}
}
但是当我调用此proc时,如何传递false
或true
:
test "false" or test false?
答案 0 :(得分:3)
你做错了(忽略了你在isSet
条件表达式中使用单词if
这一事实无效的事实。而是做
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
之一的字符串为false。你在假设中犯了另一个错误:Tcl没有明确的字符串和布尔类型(因为它是无类型的)所以"false"
和false
与Tcl解释器完全相同它解析你的脚本的时间是双引号和花括号在Tcl 中用于分组,不用于指定文字类型(并且Tcl没有文字)。所以我建议从the tutorial开始,以更好地掌握这些想法。
当我描述将值解释为boolean时我提到的类型是Tcl值的内部并且不是用户可见的 - 是的,内部Tcl缓存值的“本机”表示,因此当您执行set x [expr {1 + 2}]
时,内部分配给x
的值将具有整数类型,但这实际上是一个实现细节。