我正在尝试在TCL中创建一个非常简单的数组,但我无法弄清楚语法是否将它附加到赋值中的变量。这是我想要做的:
set var1 "some text"
set var2 "other text"
array set arrValues {
1 $var1 + _text
2 $var2 + _text
3 $var1 + _different_text
4 $var1 + _different_text
}
我如何告诉它应该将$var1 + _text
视为需要插入的数据而不需要在数组之外创建另一个变量?
答案 0 :(得分:1)
你可以把字符串加在一起...但是它知道变量名称的结束位置,把它放在大括号$ {var1} _text中...所以你的数组值得到评估,把它们放在引号而不是括号中,或使用[list abc] (请原谅缺少格式 - 从我的手机接听)
答案 1 :(得分:1)
由于您要替换变量,因此无法使用{braces}
来声明数组元素:
$ tclsh
% set var1 "some text"
some text
% set var2 "other text"
other text
% array set arrValues {1 ${var1}_text 2 ${var2}_text 3 ${var1}_different_text 4 ${var2}_different_text}
% parray arrValues
arrValues(1) = ${var1}_text
arrValues(2) = ${var2}_text
arrValues(3) = ${var1}_different_text
arrValues(4) = ${var2}_different_text
% array set arrValues [list 1 ${var1}_text 2 ${var2}_text 3 ${var1}_different_text 4 ${var2}_different_text]
% parray arrValues
arrValues(1) = some text_text
arrValues(2) = other text_text
arrValues(3) = some text_different_text
arrValues(4) = other text_different_text
答案 2 :(得分:1)
最简单的健壮方法可能是使用list
命令构造要与array set
一起使用的东西:
set var1 "some text"
set var2 "other text"
array set arrValues [list \
1 "$var1 + _text" \
2 "$var2 + _text" \
3 "$var1 + _different_text" \
4 "$var1 + _different_text"
]
假设您只想要替换变量。 ("${var1}_text"
可能更适合您的特定情况;您可以使用您想要的任何Tcl替换来构建要插入的值。)但是,在这种情况下,我实际 相反:
set var1 "some text"
set var2 "other text"
set arrValues(1) "$var1 + _text"
set arrValues(2) "$var2 + _text"
set arrValues(3) "$var1 + _different_text"
set arrValues(4) "$var1 + _different_text"
它更短。当您使用文字词典作为设置内容的来源,或者当您完全在其他地方生成序列化值时(例如,来自array set
),array get
命令才真正有用另一个背景)。