在数组创建期间将字符串附加到变量

Append a string to variable during array creation

我试图在 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 视为需要插入的数据,而不需要在数组外创建另一个变量?

您可以将字符串连接在一起...但是它知道变量名在哪里结束,将其放在大括号 ${var1}_text... 这样您的数组值就会得到评估,将它们放在引号中大括号,或使用 [list a b c] (请原谅缺少格式 - 来自我的回答 phone)

因为要代入变量,所以不能用{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

最简单可靠的方法可能是使用 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 ).