вопрос массива tcl - ключ с кавычками - PullRequest
4 голосов
/ 29 января 2011

это удивило меня

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

похоже, что буквальное foo не совпадает с "foo". И все же

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

что я не понимаю

1 Ответ

8 голосов
/ 29 января 2011

Символ " является специальным только для синтаксического анализатора 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...