我们可以在tcl脚本中使用的任何过滤器?

时间:2011-10-20 14:20:56

标签: tcl

我对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
    }
}

3 个答案:

答案 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 ...
}