我对for循环有疑问,
for {{set loop 0} {$loop < 100} {incr loop}} {
#do someting here
}
循环从0到99,我为循环的每个值做了一些事情,但是如果循环是3,我会跳过它,所以,tcl中是否有任何过滤器来实现它,或者我们应该将其写为:
for {{set loop 0} {$loop < 100} {incr loop}} {
if {loop != 3} {
#do someting here
}
}
答案 0 :(得分:5)
您可以使用“继续”命令。例如:
for {set loop 0} {$loop < 100} {incr loop} {
if {$loop == 3} continue
# do something here
}
答案 1 :(得分:2)
% proc xiter {varName "over" a z "excluding" filter body} {
upvar 1 $varName i
set excl [lsort $filter]
for {set i $a} {$i < $z} {incr i} {
if {[lsearch -exact -sorted $excl $i] < 0} {
uplevel 1 $body
}
}
}
% xiter loop over 0 10 excluding {5 3 8} {
puts $loop
}
0
1
2
4
6
7
9
答案 2 :(得分:1)
for
的第一,第三和第四个参数可以是任意脚本,所以你可以这样做:
for {set i 0} {$i < 100} {incr i [expr {$i == 2 ? 2 : 1}]} {
do stuff with $i ...
}