2010-02-25 71 views
5

TCL代碼是否需要?如果我們不在腳本中使用「unset」關鍵字會發生什麼?我應該知道的任何不良影響?我們是否需要在TCL中「取消」變量?

我繼承了一些遺留代碼,並且由於「未設置」而出現的錯誤 - 不存在的變量正在將我推上牆!

回答

8

使用info exists命令可以確定變量在使用前是否存在。確保如果你不使用unset,那麼你不會在其他地方使程序的邏輯失效。

有沒有Tcl特定的原因unset一個變量,也就是說,它不會導致內存泄漏或用完變量句柄或任何瘋狂的東西。使用unset可能是一種防禦性的編程習慣,因爲它阻止將來不再使用變量。不知道更多關於您正在使用的確切代碼的信息,很難提供更詳細的信息。

+0

沒有內存泄漏,或喜歡。正是我希望聽到的!現在我可以在整個代碼中禁止那些愚蠢的「不安全」。是的,現在看,它對我來說似乎更多的是防禦性編程。就我而言,它看起來有點「太」防守。 「信息存在」對我來說是新的 - 謝謝! – chronodekar 2010-02-25 06:06:32

2

除了其他答覆,如果你使用的Tcl版本夠新,你也可以使用:

unset -nocomplain foo

那會如果存在未設置foo的,但如果它不將不抱怨「T。

傑夫

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." 
} 
1

取決於系統統計可能會給「無法分配字節」的,當你的腳本存儲龐大的數據爲變量和數組的問題。一旦緩存或RAM滿了,它會中斷「無法分配XXXXXXXX字節」。

確保您不存儲如此多的數據到變量,否則做未設置一次使用結束了各自的數據集(變量)

相關問題