foreach tcl list打印tcl中的每个值,并为每个值分配一个tcl列表中的变量

时间:2015-01-27 09:03:49

标签: list variables foreach set tcl

proc mulval { addr } {
    set lst [list [split $addr "."]]
    set lst2 [list a b c d]
    foreach i [$lst2] j [$lst] {
        set $i [$j]
        puts "$i $j"
    }
}

上面的代码是打印列表中的每个值,即lst2和$ lst打印并分配给$ lst2的变量名和$ lst的值。 代码中显示的错误是"无效的命令名称" a b c d" "

2 个答案:

答案 0 :(得分:3)

方括号用于命令...删除它们:

proc mulval { addr } {
    set lst [list [split $addr "."]]
    set lst2 [list a b c d]
    foreach i $lst2 j $lst {
        set $i $j
        puts "$i $j"
    }
}

答案 1 :(得分:0)

如果要分配列表的元素,有几种方法可以这样做。在您的代码中,您执行了类似的操作:

foreach varName {a b c d} value [split $addr .] {set $varName $value}

这有效,但有点过于复杂。这个调用做了同样的事情:

foreach {a b c d} [split $addr .] {}
# can also be written as
foreach {a b c d} [split $addr .] break

如果你有Tcl 8.5或更高版本,你应该使用lassign代替:

lassign [split $addr .] a b c d

文档:breakforeachlassignsetsplit