在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 语言本身与其标准命令库(ifsetwhile 等)之间的区别 【参考方案1】:

因为您在 "$x

如果您在 while 条件中使用大括号 而不是引号 " ",则该测试仅由 while 循环本身进行评估,而不是由 tcl 解释器的替换传递进行评估,并按照您的预期执行。

经验法则:在 if/while/for 等测试中始终使用 (除非第一个提到的行为是您要寻找的)。

【讨论】:

嗨,我有点困惑。为什么使用引号会使条件 "$x

以上是关于在while循环中继续的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

循环中的 Cout 奇怪的行为

矩阵形成中的奇怪行为(C++,犰狳)

循环中的列表行为非常奇怪

在嵌套的 while 循环中继续

R中的for循环与while循环

如何创建一个while循环,继续循环,直到在C++中“使用流”输入一个键?