2011-01-28 27 views
4

這讓我感到驚訝TCL陣列的問題 - 鍵與行情

>set foo("bar") 12 
12 
>parray foo 
foo("bar") = 12 
>set foo(bar) 12 
12 
>parray foo 
foo("bar") = 12 
foo(bar) = 12 

似乎字面foo是不一樣的「富」。然而

>string length foo 
3 
>string length "foo" 
3 

我是什麼不理解

回答

8

"字符是唯一特別的Tcl的解析器在單詞的開頭(或由"開始了字的結束,當然) 。事實上,如果你把空間中你會得到一個錯誤:

% set foo("b a r") 2 
wrong # args: should be "set varName ?newValue?" 

在你正在做的string length通話的情況下,"在單詞的開頭因此它是特別。如果我們把一個額外的主要垃圾字符,我們看到的"的特殊性消失:

% string length x"bar" 
6 

如果你正在做的事情與數組下標複雜,我認爲它通常是更容易把元素的名稱一個變量本身,因爲那更清晰這是怎麼回事(通常更容易調試太):

set idx "bar" 
set foo($idx) 12 
+0

TY - 有我在想,TCL wasnt作爲奇怪的像Perl – pm100 2011-01-31 22:03:18