Tcl) 使用'foreach'时自动取消设置'varlist'



运行以下命令时:

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

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

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

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

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

有没有办法重写不保留"Var"集而不是手动取消设置的代码?

变量

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

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

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

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

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

但是没有像多纳尔已经解释的那样神奇的未设置开关。

最新更新