while循环中继续的奇怪行为

时间:2010-12-22 12:37:15

标签: tcl while-loop continue

我在TCL编程方面相当新,通过基础知识我遇到了以下代码片段:

set x 0;
while "$x < 3" {
    set x [expr $x + 1]
    if {$x >6} break;
    if "$x > 2" continue;
    puts "x is $x"; 
    }
puts "exited second loop with X equal to $x\n"

执行时,结果如下:

  

x是1
  x是2
  退出第二个循环,X等于7

令我惊讶的是,当执行continue命令时,似乎没有评估while循环测试(x <3)。但是在tcl联机帮助页中声明“正文中的continue语句将停止执行代码并且将重新评估测试。

我错过了什么?

1 个答案:

答案 0 :(得分:9)

因为您在“$ x&lt; 3”中使用了引号,所以您只评估该条件一次:tcl解释器第一次看到它,永久地使测试“0 <3”。因为它总是正确的,所以当你[休息]时,你只能退出while循环的主体。

如果对while条件使用大括号{}而不是引号“”,则该测试仅由while循环本身评估,而不是由tcl解释器的替换传递评估,并按预期执行。

经验法则:在if / while / for etc的测试中总是使用{}(除非首先提到的行为是你正在寻找的)。