tcl数组问题 - 带引号的键

时间:2011-01-28 21:39:02

标签: arrays 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与“foo”不同。然而

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

我无法理解

1 个答案:

答案 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