我还没有设法理解如何在其他构造中嵌入expr。 我可以轻松输入
set i {1 2 3}
expr {[llength $i]} #result is 3
然而,经过长时间的研究,我没有设法找到一种方法将其放入内部,如果
if {"magic tcl code with expr and llength==3 required here"} {
puts "length is 3"
}
答案 0 :(得分:4)
if
的第一个参数是一个表达式,就像expr
的参数是一个表达式一样。
if {[llength $i] == 3} {
puts "length is 3"
}
您确实可以使用expr
括号[
将]
置于表达式中,就像使用任何命令一样,但通常没有理由这样做;它只是使一切更加冗长。
if {[ expr {[llength $i]} ] == 3} {
puts "length is 3"
}
当你有一个动态的表达式时,上述规则的例外就出现了;将expr
置于表达式中是有意义的,因为它允许外部部分有效地进行字节码编译。
# Trivial example to demonstrate
set myexpression {[llength $i]}
if {[expr $myexpression] == 3} {
puts "evaluated $myexpression to get three"
}
这很罕见。
答案 1 :(得分:1)
if
命令有一个内置的expr。特别是if
和expr
期望和表达式作为第一个参数:
if expression ...
expr expression
因此,如果您想执行expr {[llength $i]}
,请执行以下操作:
if {[llength $i]} {
}
但说实话,我不相信你想要执行
expr {[llength $i]}
我认为你想要的是检查长度是否为3,因此你真正想要的是
expr {[llength $i] == 3}
如果是这种情况,那么if
版本将是:
if {[llength $i] == 3} {
puts "llength is 3"
}