这让我感到惊讶
>set foo("bar") 12
12
>parray foo
foo("bar") = 12
>set foo(bar) 12
12
>parray foo
foo("bar") = 12
foo(bar) = 12
Run Code Online (Sandbox Code Playgroud)
字面上的foo似乎和"foo"不一样.但是
>string length foo
3
>string length "foo"
3
Run Code Online (Sandbox Code Playgroud)
我不明白的是什么
该"字符仅对于单词开头的Tcl解析器(或者"当然是由一个单词的结尾)特殊.事实上,如果你把空格放进去就会出错:
% set foo("b a r") 2
wrong # args: should be "set varName ?newValue?"
Run Code Online (Sandbox Code Playgroud)
在你做的情况下string length调用," 是在一个单词的起始所以它是特殊的.如果我们添加一个额外的主要垃圾角色,我们会发现它的特殊性"消失了:
% string length x"bar"
6
Run Code Online (Sandbox Code Playgroud)
如果你正在做一些复杂的数组索引,我认为通常更容易将元素的名称放在变量本身,因为那时它更清楚发生了什么(通常也更容易调试):
set idx "bar"
set foo($idx) 12
Run Code Online (Sandbox Code Playgroud)