如何在if语句中使用expr?

时间:2016-12-29 12:34:53

标签: if-statement tcl expr

我还没有设法理解如何在其他构造中嵌入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"
}

2 个答案:

答案 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。特别是ifexpr期望和表达式作为第一个参数:

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"
}