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

Tcl) Auto-unset of 'varlist' while using 'foreach'

同时 运行 以下内容:

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 createNamespaceVars {ns args} {
     namespace eval $ns {
         foreach Var $args {variable $Var}
     }
}

但是正如 Donal 已经解释的那样,没有神奇的取消设置开关。