TCL数组键未被识别

Nar*_*rek 0 arrays list tcl

可能重复:
tcl数组问题 - 带引号的键

我有以下代码:

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") 
Run Code Online (Sandbox Code Playgroud)

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

为什么?

我有它,因为我写的时候

set newVar "a"
puts $my_array($newVar)
Run Code Online (Sandbox Code Playgroud)

它返回值!

Ern*_*ill 5

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

set my_list1 {a b}
Run Code Online (Sandbox Code Playgroud)

会没事的.

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