TCL代碼是否需要?如果我們不在腳本中使用「unset」關鍵字會發生什麼?我應該知道的任何不良影響?我們是否需要在TCL中「取消」變量?
我繼承了一些遺留代碼,並且由於「未設置」而出現的錯誤 - 不存在的變量正在將我推上牆!
TCL代碼是否需要?如果我們不在腳本中使用「unset」關鍵字會發生什麼?我應該知道的任何不良影響?我們是否需要在TCL中「取消」變量?
我繼承了一些遺留代碼,並且由於「未設置」而出現的錯誤 - 不存在的變量正在將我推上牆!
使用info exists
命令可以確定變量在使用前是否存在。確保如果你不使用unset
,那麼你不會在其他地方使程序的邏輯失效。
有沒有Tcl特定的原因unset
一個變量,也就是說,它不會導致內存泄漏或用完變量句柄或任何瘋狂的東西。使用unset
可能是一種防禦性的編程習慣,因爲它阻止將來不再使用變量。不知道更多關於您正在使用的確切代碼的信息,很難提供更詳細的信息。
除了其他答覆,如果你使用的Tcl版本夠新,你也可以使用:
unset -nocomplain foo
那會如果存在未設置foo的,但如果它不將不抱怨「T。
傑夫
對於說明,因爲我似乎不能評論上面的「信息存在」;
我用這種形式往往..
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字節」。
確保您不存儲如此多的數據到變量,否則做未設置一次使用結束了各自的數據集(變量)
沒有內存泄漏,或喜歡。正是我希望聽到的!現在我可以在整個代碼中禁止那些愚蠢的「不安全」。是的,現在看,它對我來說似乎更多的是防禦性編程。就我而言,它看起來有點「太」防守。 「信息存在」對我來說是新的 - 謝謝! – chronodekar 2010-02-25 06:06:32