如何在 if 语句中使用 expr?

How to use expr inside if statement?

我还没有弄明白如何将 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"
}

if 命令有一个内置的表达式。具体来说,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"
}

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

这非常罕见。