TCL 程序控制

for
for start test next body
for是一个与C语言中for结构类似的循环命令。start、next和body必须是Tcl命令字符串,test是表达式字符串。for命令首先调用Tcl解释器来执行start进行一些初始化操作。然后将test做为表达式进行评估。如果评估结果非零,则调用Tcl解释器执行body,然后调用解释器执行next,然后重复以上步骤,直到test表达式评估结果为零。如果在body中调用了continue命令,则跳过当前body中continue后面的命令,进入下一次循环。如果在body中调动了break命令,则终止for循环命令。for循环命令返回一个空字符串。

for {set x 0} {$x<5} {incr x} {
    puts $x;
}
 for循环中的test表达式必须要用大括号包围起来,否则会在for循环之前首先进行变量替换,这会导致test表达式无法感知到变量的变更,从而导致循环不执行或者无限循环。当test表达式被大括号包围起来,会使变量替换延迟到表达式求值时,从而能偶感知变量的变更。具体是无限循环还是循环不执行,取决于变量替换后表达式的值。如果值为非零则会无限循环,否则循环不执行。

foreach
foreach varName list body
foreach varlist1 list1 ?varlist2 list2 ...? body
foreach循环命令可以循环一个或多个列表中的值。在循环时,list中的元素会像使用lindex命令一样从前到后依次分配给varName,然后调用Tcl解释器执行body中的命令。

set values {a b c d e f g h}
foreach value $values {
    puts $value
}
 foreach还可以同时循环多个列表。每个列表都有一个与之对应的循环变量。在每次迭代时都会将list中的值分配给对应的varlist。list中的每个值会按顺序使用一次。最大迭代次数为list的最大元素数,从而保证list中的值一地你给会被迭代一次。如果列表中的值已经分配完毕,但是循环未结束,则使用空字符串填充对应的循环变量。

set values {a b c d e f g h}
set numbers {1 2 3 4 5}
foreach number $numbers value $values {
    puts "number:$number->value:$value"
}
 list中的值每次可以迭代多个,只需要将varName指定为一个变量列表。每次迭代时会从list中取出列表中变量数量个值,依次分配给变量列表中的变量。当list中元素数量不足时会用空字符串填充变量。

set numbers {1 2 3 4 5}
set values {a b c d e f g h}
foreach {i j k} $values {
    puts "$i--$j--$k"
}
foreach number $numbers {i j} $values {
    puts "$number--$i--$j"
}
while
while test body
while命令首先计算test表达式的值,如果为true,则调用Tcl解释器执行body中的命令。执行完body中命令后,会再次计算test表达式,重复以上步骤直到test表达式为false为止。如果在body中调用了continue命令,则跳过当前body中continue后面的命令,进入下一次循环。如果在body中调动了break命令,则终止while循环命令。while循环命令返回一个空字符串。

set x 0
while {$x<5} {
    puts $x;
    incr x;
}
与for命令一样,test表达式必须用大括号包围起来。否则while循环会不执行或者无限循环。

break
通常用于循环结构for、foreach、while中提前终止break所在循环。

set x 0
while {$x<5} {
    if {$x<3} {
        puts $x;
    } else {
        break;
    }
    incr x;
}
continue
通常用于循环结构for、foreach、while中提前结束本轮循环。

set x 0
while {$x<5} {
    if {$x==3} {
        incr x;
        continue;
    }
    puts $x;
    incr x;
}

————————————————
版权声明:本文为CSDN博主「_荣耀之路_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/asty9000/article/details/90603692

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值