在Tcl中,何时应该使用set vs unset来准备使用变量

时间:2017-06-01 17:42:11

标签: tcl

在我的脚本中,当使用变量时,我通常会清空变量的内容以确保列表追加是干净的。类似于以下内容

set var1 [list]
foreach var2 {a b c} {
  lappend var1 $var2
}

但似乎首先取消变量会完成同样的事情。像这样的东西

unset -nocomplain var1
foreach var2 {a b c} {
  lappend var1 $var2
}

使用one vs other是否有任何优势?

2 个答案:

答案 0 :(得分:2)

在这种情况下,它没有任何区别。如果我要在自己的代码中编写这样的循环,我更有可能使用set var {},因为那是空列表文字(以及空字符串,空字典,空脚本等) 。)但是没有任何执行时间差异可言。它只反映了我对脚本的看法。

当然,如果你正在做一些重要的事情,请使用正确的案例。

答案 1 :(得分:0)

正如Donal所写,set var {}。在内部,无论您是指定{}[list]等,都将分配相同的值。是的,它会闪烁,不会,这不会是一个问题。

关于set vs unset:虽然您可以根据需要使用它们,但它们主要用于不同的模式。在 assign-empty-value 模式中,您需要一个可以写入或读取的变量,并带有预定义的空值。在从范围移除模式中,您希望名称不被使用(它不会无法使用:您仍然可以分配给/创建它)。除非你追求的是第二种模式,否则你可能不会对unset有太多的认真使用。