我们需要在T​​CL中“取消设置”变量吗?

时间:2010-02-25 05:42:55

标签: tcl unset

是否需要良好的TCL代码?如果我们不在脚本中使用“unset”关键字会发生什么?我应该知道的任何不良影响?

我正在继承一些遗留代码,而由于“未设置”而导致的错误 - 不存在的变量正在推动我的发展!

5 个答案:

答案 0 :(得分:9)

使用info exists命令可以在使用变量之前确定变量是否存在。如果你没有使用unset,请确保不要在其他地方扰乱程序的逻辑。

unset变量没有特定于Tcl的原因,也就是说,它不会导致内存泄漏或用尽变量句柄或类似的任何事情。使用unset可能是一种防御性编程实践,因为它可以防止在变量不再相关之后将来使用它。如果不了解您正在使用的确切代码,则很难提供更详细的信息。

答案 1 :(得分:2)

除了其他回复之外,如果您的Tcl版本足够新,您还可以使用:

unset -nocomplain foo

如果存在,那将会取消foo,但如果不存在则不会抱怨。

杰夫

答案 2 :(得分:1)

取决于系统统计信息,当脚本将大量数据存储到变量和数组中时,它可能会“无法分配字节”问题。一旦缓存或RAM完全说“无法分配XXXXXXXX字节”,它就会中断。

确保您没有将那么多数据存储到变量中,否则在相应数据集(变量)的使用结束后取消设置

答案 3 :(得分:0)

请注意,因为我似乎无法评论上面的“信息存在”;

我经常使用这种形式..

if { [info exists pie] && [$pie == "ThisIsWhatIWantInPie"]} {
    puts "I found what I wanted in pie."
} else {
    puts "Pie did not exist; but I still did not error,TCL's evaluation \
          will see the conditional failed on the [info exists] and not \
          continue onto the comparison."
}

答案 4 :(得分:0)

除了其他答复外,我想补充一下,如果您想忽略由于取消设置不存在的变量而导致的错误,请使用'catch'。

#!/bin/bash

catch {unset newVariable}