TCL数组键未被识别

时间:2011-05-30 13:14:50

标签: arrays list tcl

  

可能重复:
  tcl array question - key with quotes

我有以下代码:

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") 

在列表行我得到ERROR“无法读取my_array(”a“):数组中没有这样的元素”

为什么?

我有,因为当我写

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

它返回值!

1 个答案:

答案 0 :(得分:5)

这只是Tcl中的其中一个。数组元素不是my_array("a") - 它是my_array(a)。引用数组时不要包含引号。它们实际上并不是必需的,尽管在这种情况下,当您首先将数据安装到阵列中时,注意事项是有害的 - 即,

set my_list1 {a b}

会没事的。

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