2011-05-30 54 views
0

可能重复:
tcl array question - key with quotesTCL阵列关键是不被认可

我有以下代码:

set my_list1 {"a" "b"} 
set my_list2 {"@1" "@2"} 
array set my_array {} 

foreach li1 $my_list1 li2 $my_list2 { 
    set my_array($li1) $li2 
} 

puts $my_array("a") 

在列表行我得到错误“可以读取my_array(“a”):阵列中没有这样的元素“

为什么?

我拥有它,因为当我写

set newVar "a" 
puts $my_array($newVar) 

它返回的值!

+2

非常接近:http://stackoverflow.com/questions/4833306/tcl-array-question-key-with-quotes – Drakosha 2011-05-30 13:27:03

+0

是的,这是完全一样的问题! – Narek 2011-05-30 14:00:43

回答

5

这只是Tcl中的一件事情。数组元素不是my_array("a") - 它是my_array(a)。引用数组时不要包含引号。他们其实没有必要,但在这种情况下,注有害的,当你的数据安装到摆在首位的阵列 - 即

set my_list1 {a b} 

会就好了。

Tcl看起来就像一个“正常”的编程语言,它很容易忘记它的解析器真的是多么原始。请记住,一切都被空白分解成“单词”。如果双引号字符没有空格,那么它不在一个单词的开头,并且不再有任何特殊意义。对数组元素的引用是单个单词,并且在变量插值之后,它必须具有,正确的文本是。您不能在元素名称周围添加引号,因为这些引号不是该单词的正确文本的一部分。

+0

我改变了my_array(“a”) - > my_array(a)并设置了my_list1 {“a”“b”} - > set my_list1 {a b},它工作正常,但为什么以前不工作? – Narek 2011-05-30 13:25:18

+0

添加了一点解释。 – 2011-05-30 13:32:14

+0

即使不需要更改my_list1 {“a”“b”} - > set my_list1 {a b}。 my_array(“a”) - > my_array(a)就足够了! – Narek 2011-05-30 13:46:08