Любой фильтр, который мы можем использовать в сценарии tcl? - PullRequest
2 голосов
/ 20 октября 2011

У меня есть вопрос о цикле 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 ]

5 голосов
/ 20 октября 2011

Вы можете использовать команду «продолжить».Например:

for {set loop 0} {$loop < 100} {incr loop} {
    if {$loop == 3} continue
    # do something here
}
2 голосов
/ 20 октября 2011
% 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
1 голос
/ 21 октября 2011

Первый, третий и четвертый аргументы for могут быть произвольными сценариями, поэтому вы можете сделать это:

for {set i 0} {$i < 100} {incr i [expr {$i == 2 ? 2 : 1}]} {
    do stuff with $i ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...