在while循环中继续的奇怪行为
Posted
技术标签:
【中文标题】在while循环中继续的奇怪行为【英文标题】:weird behaviour of continue in while loop 【发布时间】:2010-12-22 12:37:14 【问题描述】:我是 TCL 编程的新手,通过阅读基础知识,我遇到了以下代码 sn-p:
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 循环测试 (xbody 中的 continue 语句将停止代码的执行,并且将重新评估测试。”
我错过了什么?
【问题讨论】:
这是一个异常复杂且非惯用的sn-p。我希望它真的可以作为一个练习供您用来理解 Tcl 语言本身与其标准命令库(if
、set
、while
等)之间的区别
【参考方案1】:
因为您在 "$x
如果您在 while 条件中使用大括号 而不是引号 " ",则该测试仅由 while 循环本身进行评估,而不是由 tcl 解释器的替换传递进行评估,并按照您的预期执行。
经验法则:在 if/while/for 等测试中始终使用 (除非第一个提到的行为是您要寻找的)。
【讨论】:
嗨,我有点困惑。为什么使用引号会使条件 "$x以上是关于在while循环中继续的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章