首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >while循环中{}和"“之间的差异

while循环中{}和"“之间的差异
EN

Stack Overflow用户
提问于 2019-06-05 07:26:11
回答 1查看 113关注 0票数 1

在这个例子中,我试图弄清楚为什么while循环一直在无限期地运行。给出的解释是

如果测试放在引号中,则替换阶段将用变量的当前值替换任何变量,并将该测试传递给while命令进行计算,由于测试只有数字,因此它将始终计算相同的值

我知道通常你会使用大括号而不是引号,但我想知道为什么不使用双引号。我还理解双引号将替换这些值,而大括号不会。

代码语言:javascript
复制
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 < 5“时,为什么"6 < 5”仍然被解释为真?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-05 07:36:58

当tcl尝试计算while语句时,它做的第一件事是将语句拆分成单词,并替换双引号或方括号中的任何内容。大括号中的数据不会被替换。

这发生在调用while命令之前。在此轮替换之后,所有替换的结果都将作为参数传递给while命令。

因此,为while语句提供了两个参数:

  1. 0 <5
  2. 大括号内的所有内容

while看到的是一个永远不会改变的静态条件,因此循环永远运行。

您应该使用大括号,以便tcl在每次迭代时将条件传递给while命令:

代码语言:javascript
复制
while {$x < 5} { ... }

有了上面的内容,while将获得以下参数:

  1. $x <5

中的所有内容

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56452511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档