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

时间:2015-03-07 21:14:10

标签: arrays tcl

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

3 个答案:

答案 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命令才真正有用另一个背景)。