6

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

我继承了一些遗留代码,并且由于“未设置”不存在的变量而出现的错误让我陷入困境!

4

5 回答 5

11

使用命令可以在使用变量之前确定变量是否存在info exists。确保如果您不使用unset,则不会在其他地方破坏程序的逻辑。

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

于 2010-02-25T05:50:21.010 回答
2

除了其他响应,如果您的 Tcl 版本足够新,您还可以使用:

unset -nocomplain foo

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

于 2010-02-26T01:54:37.030 回答
1

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

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

于 2014-02-27T12:32:02.363 回答
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."
}
于 2010-03-03T14:10:26.310 回答
0

除了其他响应之外,我想补充一点,如果您想忽略由于取消设置不存在的变量而引发的错误,请使用“catch”。

#!/bin/bash

catch {unset newVariable}
于 2020-11-16T05:25:56.093 回答