2015-08-27 64 views
0

我學習TCL,發現我可以初始化數組(K1,V1設置鍵值)使用列表變量設置

array set a2 {k1 v1 k2 v2} 

然而,當我嘗試使用現有列表作爲

set var3 "k1 v1 k2 v2" 
array set a2{$var3} 

set var3 [listk1 v1 k2 v2] 
array set a2{$var3} 

我得到一個錯誤:

wrong # args: should be 'array set arrayName list"

我在做什麼錯?

回答

3

您缺少數組名稱和值之間的空格。語法是「數組名稱設定值」,但你稱它像「陣列設置namevalue」

array set a2 $var3 

在你身邊包含變量,這將防止變量被擴展支架的其他例子。 ${var3}將擴展爲$var3,但{$var3}不會。

+1

另外,'$ var3'沒有大括號:如果添加空格,大括號會阻止變量替換,而您會得到字符串「$ var3」。 –

+0

謝謝。刪除括號是關鍵,因爲即使刪除空間後,我得到了一個錯誤 – user915783

2

有時當命令調用出錯時,它有助於將該命令看作列表。通過這種方式,人們可以大致瞭解命令在準備好執行時的外觀。

list array set a2{$var3} 
# -> array set {a2{k1 v1 k2 v2}} 

嗯,不,看起來不正確。應該有四個字,第三個字看起來很奇怪。

如果我在左大括號之前放置空格,那麼該怎麼辦?

list array set a2 {$var3} 
# -> array set a2 {$var3} 

關閉,但沒有雪茄。它看起來像大括號是干擾變量替代。如果我刪除它們會怎麼樣?

list array set a2 $var3 
# -> array set a2 {k1 v1 k2 v2} 

而且有很多歡樂。

以這種方式,人們可以嘗試命令結構和引用,直到一個正確的。只是一個小費。

+0

這樣一個有用的提示...謝謝 – user915783