这个proc在tcl中的结果是什么?

时间:2011-11-03 09:33:02

标签: tcl

我对以下过程有疑问:

proc setDefault {{nampspaceList "ALL"}} {
    if {$nampspaceList == "ALL"} {
        set nampspaceList "namespace1 namespace2 namespace3"
    }
    foreach ns $nampspaceList {
        append ns "::setDefault"
        $ns
    }
}

附加的ns是“:: setDefaultnamespace1namespacenamename3”,但是在foreach循环中& ns的含义是什么,每次附加一个命名空间,它会打印出一次结果?

2 个答案:

答案 0 :(得分:3)

程序中的foreach循环循环遍历变量nampspaceList中的列表,对于列表中的每个项目,它通过向::setDefault附加$ns来创建命令。

然后,行{{1}}会尝试执行该命令。

答案 1 :(得分:1)

嗯,不,运行foreach循环后ns的最终值是“[lindex $ nampspaceList end] :: setDefault”,因为在每次迭代中,ns都是用列表$ nampspaceList中的每个项设置的。

您可以通过在代码中间添加一些放置来检查。

例如用setDefault {ns1 ns2 ns3}调用它 将ns设置为ns1::setDefault(在“:: setDefault”附加之后),ns2::setDefaultns3::setDefault