运行以下内容时:
foreach Var {Item1 Item2 Item3} {
# Do something
}
变量'Var'的值为'Item3'。是否有自动取消设置的选项,或者我将手动取消设置?
问的原因是我使用'foreach'语句定义了多个名称空间,它给我留下了很多不需要的变量。
具体来说,我需要在命名空间中定义一些变量:
namespace eval ::Bla {
foreach Var {Item1 Item2 Item3} {variable $Var}
}
有没有办法重新编写没有设置'Var'而不是手动取消设置的代码?
答案 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已经解释过没有神奇的未设置开关。