>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
我无法理解
答案 0 :(得分: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