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

2 回答 2

4

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

这是相当罕见的。

于 2016-12-29T12:51:26.287 回答
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"
}
于 2016-12-29T12:51:00.637 回答