|
Tcl-循环命令时间:2025-05-10 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 set x 0 while {$x<5} { if {$x<3} { puts $x; } else { break; } incr x; } 通常用于循环结构for、foreach、while中提前终止break所在循环。 continue set x 0 while {$x<5} { if {$x==3} { incr x; continue; } puts $x; incr x; } 通常用于循环结构for、foreach、while中提前结束本轮循环。 上一篇理论背景下一篇Tcl-列表相关命令 |