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