2017-06-01 70 views
1

在我的腳本中,當使用變量時,我通常會清空變量的內容以確保列表附加內容是乾淨的。類似以下內容在Tcl中,何時應該使用use set vs unset來準備使用變量

set var1 [list] 
foreach var2 {a b c} { 
    lappend var1 $var2 
} 

但是,它似乎首先取消設置變量會完成同樣的事情。像這樣的東西

unset -nocomplain var1 
foreach var2 {a b c} { 
    lappend var1 $var2 
} 

使用一個和另一個有什麼優勢嗎?

回答

2

在這種情況下沒有任何區別。如果我要在自己的代碼中編寫這樣的循環,我會更可能使用set var {},因爲這是空列表文字(以及空字符串,空字典,空腳本等),但是在那裏沒有任何執行時差可以說。它只是反映了我對劇本的看法。

當然,如果你正在做的事情,它確實重要的,使用正確的案件。

+0

謝謝。但在什麼情況下會有所作爲? – Jonjilla

+0

它可以在內部表現和閃爍方面有所作爲嗎? –

+0

它會產生變化的情況是那些你首先要讀取變量的地方,當然'info exists'也會看到變化。在'namespace eval'內部工作時也有一些微妙之處(唉,長期以來的錯誤特徵)。大多數時候,只要寫出有意義的東西即可。 –

0

正如Donal寫的,set var {}。在內部,無論您是否分配{},[list]等,都會分配相同的值。是的,它會閃爍,並且不會,這不會成爲問題。

關於set vs unset:雖然您可以根據自己的需要使用它們,但它們通常會使用不同的模式。在分配空值模式中,您希望使用預定義的空值準備寫入或讀取變量。在從範圍中刪除模式您希望該名稱未使用(它不會無法使用:您仍然可以分配/創建它)。除非你喜歡第二種模式,否則unset可能不會有太大的用處。

相關問題