これは適切な TCL コードの要件ですか? スクリプトで「unset」キーワードを使用しないとどうなりますか? 知っておくべき悪影響はありますか?
私はいくつかのレガシーコードを継承しており、存在しない変数を「設定解除」するために発生するエラーが私を壁に追いやっています!
コマンドを使用して、使用する前に変数が存在するかどうかを判断することができますinfo exists
。を使用していない場合unset
は、プログラムのロジックを他の場所で混乱させないようにしてください。
変数には Tcl 固有の理由はありunset
ません。つまり、メモリ リークや変数ハンドルの不足などの異常な事態が発生することはありません。使用unset
は、関連性がなくなった後の変数の将来の使用を妨げるため、防御的なプログラミング手法になる可能性があります。作業している正確なコードについて詳しく知らなければ、より詳細な情報を提供することは困難です。
他の応答に加えて、Tcl バージョンが十分に新しい場合は、以下も使用できます。
unset -nocomplain foo
foo が存在する場合は設定を解除しますが、存在しない場合は文句を言いません。
システム統計によっては、スクリプトが巨大なデータを変数や配列に保存しているときに、「バイトを割り当てることができない」という問題が発生する場合があります。キャッシュまたはRAMがいっぱいになると、「XXXXXXXXXバイトを割り当てることができません」と言って壊れます。
それほど多くのデータを変数に保存していないことを確認してください。それ以外の場合は、それぞれのデータセット (変数) の使用が終了したら設定を解除してください。
上記の「情報が存在します」についてコメントできないようです。
私はこの形をよく使います..
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."
}
他の応答に加えて、存在しない変数の設定を解除した結果として発生するエラーを無視したい場合は、「キャッチ」を使用してください。
#!/bin/bash
catch {unset newVariable}