【发布时间】:2019-06-05 07:36:58
【问题描述】:
我试图弄清楚为什么在这个例子中,while 循环会无限期地持续下去。给出的解释是
如果 test 放在引号内,则替换阶段会将任何变量替换为其当前值,并将该测试传递给 while 命令进行评估,并且由于测试只有数字,所以它总是评估相同
我知道通常你只会使用大括号而不是引号,但我想了解为什么不使用双引号。我也明白双引号会替换值,而花括号不会。
set x 0
while "$x < 5" {
set x [expr {$x + 1}]
if {$x > 7} break
if "$x > 3" continue
puts "x is $x"
}
当我在循环中打印 x 时,我可以看到它在增加,所以在 x 为 5 的情况下。我希望“set x”行将值更改为 6 并跳过换行符。我希望 x > 3 行在检查“$x
【问题讨论】:
-
你不是基本上将while条件设置为
0 < 5,因为它在引号中而不会被重新评估?例如,由于它是引号,因此它不会将其视为需要重新评估的表达式,而是将其视为保持该值的简单值(true)。就像我说while true {do some stuff}一样,它没有任何理由会检查 true 是否仍然正确。
标签: while-loop tcl