我在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语句将停止执行代码并且将重新评估测试。”
我错过了什么?
答案 0 :(得分:9)
因为您在“$ x&lt; 3”中使用了引号,所以您只评估该条件一次:tcl解释器第一次看到它,永久地使测试“0 <3”。因为它总是正确的,所以当你[休息]时,你只能退出while循环的主体。
如果对while条件使用大括号{}而不是引号“”,则该测试仅由while循环本身评估,而不是由tcl解释器的替换传递评估,并按预期执行。
经验法则:在if / while / for etc的测试中总是使用{}(除非首先提到的行为是你正在寻找的)。