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がいっぱいになると、「XXXXXXXXXバイトを割り当てることができません」と言って壊れます。

それほど多くのデータを変数に保存していないことを確認してください。それ以外の場合は、それぞれのデータセット (変数) の使用が終了したら設定を解除してください。

于 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

他の応答に加えて、存在しない変数の設定を解除した結果として発生するエラーを無視したい場合は、「キャッチ」を使用してください。

#!/bin/bash

catch {unset newVariable}
于 2020-11-16T05:25:56.093 に答える