Tcl)自动取消' varlist'使用' foreach'

时间:2015-04-15 09:09:40

标签: foreach namespaces tcl

运行以下内容时:

foreach Var {Item1 Item2 Item3} {
    # Do something
}

变量'Var'的值为'Item3'。是否有自动取消设置的选项,或者我将手动取消设置?

问的原因是我使用'foreach'语句定义了多个名称空间,它给我留下了很多不需要的变量。

具体来说,我需要在命名空间中定义一些变量:

namespace eval ::Bla {
    foreach Var {Item1 Item2 Item3} {variable $Var}
}

有没有办法重新编写没有设置'Var'而不是手动取消设置的代码?

2 个答案:

答案 0 :(得分:0)

变量的范围是过程(类似的东西,所以这也包括lambda和方法)或命名空间(全局范围只是命名空间)。 foreach命令对定义范围毫无作用; Tcl 永远不会以这种方式工作,我不希望它很快改变。如果你想删除其中一个迭代变量(foreach可以有多个这样的变量),那么你自己必须unset

foreach Var {Item1 Item2 Item3} {
    # Do something
}
unset Var

如果您正在做任何复杂的事情,我建议在程序(lambda,方法)中始终使用foreach。它变得更快。

答案 1 :(得分:0)

对于您的特定问题,您可以将命名空间初始化代码放入proc,以便在proc结束时消失。

proc createNamespaceVars {ns args} {
     namespace eval $ns {
         foreach Var $args {variable $Var}
     }
}

但是Donal已经解释过没有神奇的未设置开关。