【问题标题】:foreach tcl list print each value in tcl and assign each value a variable in tcl listforeach tcl list 打印 tcl 中的每个值并在 tcl list 中为每个值分配一个变量
【发布时间】:2015-01-27 09:03:49
【问题描述】:
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 中的值。 代码中显示的错误是“invalid command name "a b c d" "

【问题讨论】:

标签: list variables foreach set tcl


【解决方案1】:

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

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"
    }
}

【讨论】:

  • set lst [list [split …]] 看起来也很可疑。我敢打赌set lst [split $addr "."] 更像是需要的。
【解决方案2】:

如果您想分配列表的元素,有几种方法可以做到这一点。在你的代码中,你做了这样的事情:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多