foreach

Команда цикла по элементам одного или нескольких списков.

СИНТАКСИС

      foreach varname list body 
      foreach varlist1 list1 ?varlist2 list2...? body
    

ОПИСАНИЕ

Команда организует выполнение цикла, в котором переменные цикла последовательно принимают все значения из списков значений. В простейшем случае имеется одна переменная цикла varname и один список значений list для присвоения переменной цикла. Аргумент body есть скрипт Tcl. Для каждого элемента списка list, по очереди с первого до последнего, foreach присваивает содержимое очередного элемента списка переменной varname и затем вызывает интерпретатор Tcl для исполнения body.

В общем случае в команде может быть указано несколько списков значений (например, list1 и list2), и каждый из них может быть связан с одной переменной или со списком переменных цикла (например, varlist1 и varlist2). Во время каждой итерации переменные каждого списка переменных принимают значения последовательных элементов соответствующего списка значений. Значения из списков значений используются последовательно от первого до последнего, и каждое значение используется только один раз. Общее число итераций выбирается таким, чтобы использовать все значения из всех списков значений. Если список значений не содержит достаточного числа значений для всех связанных с ним переменных цикла, вместо недостающих элементов используются пустые значения.

Внутри скрипта body можно использовать команды break и continue, аналогично команде for.

Команда foreach возвращает пустую строку.

ПРИМЕРЫ

В цикле используются переменные цикла i и j для цикла по элементам одного списка

        set x {}
        foreach {i j} {a b c d e f} { 
          lappend x $j $i
        }
    

В результате величина x равна "a d c f e".

При вычислении цикла используются три итерации.

В цикле переменные цикла i и j используются для различных списков значений.

        set x {}
        foreach i {a b c} j {d e f g} { 
          lappend x $i $j
        }
    

В результате величина x равна "a d b e c f {} g".

При вычислении цикла используются четыре итерации.

Обе предыдущие формы скомбинированы в следующем цикле

        set x {}
        foreach i {a b c} {j k} {d e f g} { 
          lappend x $i $j $k
        }
    

В результате величина x равна "a d e b f g c {} {}".

При вычислении цикла используются три итерации.