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" "
答案 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