我有以下代码:
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)
它返回值!
答案 0 :(得分:5)
这只是Tcl中的其中一个。数组元素不是my_array("a")
- 它是my_array(a)
。引用数组时不要包含引号。它们实际上并不是必需的,尽管在这种情况下,当您首先将数据安装到阵列中时,注意事项是有害的 - 即,
set my_list1 {a b}
会没事的。
Tcl看起来像一个“普通”的编程语言,很容易忘记它的解析器真实的原始性。请记住,所有内容都被空格分解为“单词”。如果双引号字符前面没有空格,则它不在单词的开头,并且它不再具有任何特殊意义。对数组元素的引用是单个单词,在变量插值之后,它必须具有完全正确的文本。您不能在元素名称周围加上引号,因为只是那些引号不是该单词正确文本的一部分。