在数组创建期间将字符串附加到变量
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
).
我试图在 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
).