2011-01-28 4 views
4

文字通りのfooは「FOO」と同じではないようだ私にTCL配列の質問 - 引用符でキー

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

を驚かせました。そして、まだ

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

何私は

答えて

8

"文字が単語(またはコースの"、によって開始された単語の終わり)の開始時にTclのパーサにだけ特別であることを理解するために失敗しています。実際には、あなたはあなたの中にスペースを入れたい場合はエラーを持っているでしょう:それはあるので、あなたがstring length呼び出しをやっている場合は

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

を、"は単語の先頭でです特別。我々は、余分なリードジャンク文字を入れた場合、我々は"のspecialnessが消えることを参照してください。

% string length x"bar" 
6 

あなたは、配列のインデックスを持つ複雑な何かをやっている場合は、私はそれがで要素の名前を入れて通常より簡単だと思いますそれは明確なので、変数自体は、何が起こっている(通常は簡単にはあまりにもデバッグする):

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

TYを - と、そこに私は、私がfooを行っているだろうかperlの – pm100

+0

として奇妙なように、そのTCLの波平を考えていた(棒)? foo({bar})? – pm100

+0

1つとして? '{foo(b a r)}'(例えば、 '$ {foo(b a r)}')でも、私の経験ではあまり頻繁に出てこない。 –