我们是否需要;“未设置”;TCL中的变量?

我们是否需要;“未设置”;TCL中的变量?,tcl,unset,Tcl,Unset,这是好的TCL代码的要求吗?如果我们在脚本中不使用“unset”关键字,会发生什么?有什么我应该知道的不良影响吗 我继承了一些遗留代码,而由于“取消设置”(unset)不存在的变量而产生的错误正把我逼上绝路 在使用变量之前,可以使用命令确定变量是否存在。如果没有使用取消设置,请确保不会在其他地方扰乱程序的逻辑 取消设置变量没有Tcl特定的原因,也就是说,它不会导致内存泄漏或变量句柄用尽或诸如此类的疯狂行为。使用unset可能是一种防御性编程实践,因为它会阻止变量在不再相关后的将来使用。如果不了解

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


我继承了一些遗留代码,而由于“取消设置”(unset)不存在的变量而产生的错误正把我逼上绝路

在使用变量之前,可以使用命令确定变量是否存在。如果没有使用
取消设置
,请确保不会在其他地方扰乱程序的逻辑


取消设置变量没有Tcl特定的原因,也就是说,它不会导致内存泄漏或变量句柄用尽或诸如此类的疯狂行为。使用
unset
可能是一种防御性编程实践,因为它会阻止变量在不再相关后的将来使用。如果不了解您正在使用的确切代码,就很难提供更详细的信息。

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

unset -nocomplain foo

如果foo存在,这将使其不安,但如果它不存在,则不会抱怨。

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

我经常用这个表格

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."
}

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


确保您没有将那么多数据存储到变量中,否则在各个数据集(变量)的使用结束后立即取消设置除了其他响应之外,我想补充一点,如果您想忽略由于取消设置不存在的变量使用“catch”而引起的错误

#!/bin/bash

catch {unset newVariable}

没有内存泄漏之类的问题。这正是我希望听到的!现在我可以在整个代码中禁止那些愚蠢的“unset”。是的,现在来看,对我来说,似乎更多的是防御性编程。不过,在我的情况下,它看起来有点“太多”的防御。“信息存在”对我来说是新的-谢谢!“足够新”涵盖了现在野外的每一个版本