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 已经解释的那样,没有神奇的取消设置开关。
同时 运行 以下内容:
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 已经解释的那样,没有神奇的取消设置开关。