【发布时间】:2011-01-20 20:58:23
【问题描述】:
这是好的TCL代码的要求吗?如果我们不在脚本中使用“unset”关键字会发生什么?我应该知道哪些不良影响?
我继承了一些遗留代码,并且由于“未设置”不存在的变量而导致的错误让我陷入困境!
【问题讨论】:
这是好的TCL代码的要求吗?如果我们不在脚本中使用“unset”关键字会发生什么?我应该知道哪些不良影响?
我继承了一些遗留代码,并且由于“未设置”不存在的变量而导致的错误让我陷入困境!
【问题讨论】:
使用info exists 命令可以在使用变量之前确定它是否存在。请确保如果您不使用unset,请确保您不会在其他地方破坏程序的逻辑。
unset 变量没有特定于 Tcl 的原因,也就是说,它不会导致内存泄漏或变量句柄用完或任何类似的疯狂。使用unset 可能是一种防御性编程实践,因为它可以防止将来使用不再相关的变量。在不了解您正在使用的确切代码的情况下,很难提供更详细的信息。
【讨论】:
除了其他回复,如果你的Tcl版本足够新,还可以使用:
unset -nocomplain foo
如果 foo 存在,它将取消设置,但如果不存在,则不会抱怨。
【讨论】:
取决于系统统计信息,当您的脚本将大量数据存储到变量和数组中时,它可能会出现“无法分配字节”的问题。一旦缓存或 RAM 满了说“无法分配 XXXXXXXX 字节”,它就会中断。
确保您没有将那么多数据存储到变量中,否则一旦使用结束,请取消设置各个数据集(变量)
【讨论】:
请注意,因为我似乎无法评论上面的“信息存在”;
我经常使用这种形式..
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."
}
【讨论】:
除了其他回复之外,我想补充一点,如果您想忽略由于取消设置不存在的变量而引发的错误,请使用“catch”。
#!/bin/bash
catch {unset newVariable}
【讨论】: