是否需要良好的TCL代码?如果我们不在脚本中使用“unset”关键字会发生什么?我应该知道的任何不良影响?
我正在继承一些遗留代码,而由于“未设置”而导致的错误 - 不存在的变量正在推动我的发展!
答案 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}