我还没有设法理解如何将 expr 嵌入到其他构造中。我可以轻松输入
set i {1 2 3}
expr {[llength $i]} #result is 3
但是,经过长时间的研究,我还没有找到一种方法将其放入 if
if {"magic tcl code with expr and llength==3 required here"} {
puts "length is 3"
}
我还没有设法理解如何将 expr 嵌入到其他构造中。我可以轻松输入
set i {1 2 3}
expr {[llength $i]} #result is 3
但是,经过长时间的研究,我还没有找到一种方法将其放入 if
if {"magic tcl code with expr and llength==3 required here"} {
puts "length is 3"
}
to 的第一个参数if
是一个表达式,就像 to 的参数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"
}
这是相当罕见的。
该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"
}