想要使用 Tcl 设置一个变量和另一个变量

vik*_*kas 1 variables tcl

我想执行这段代码,但它不是waorking,tcl脚本如下:

set i 0
foreach pattern { tiger cat horse dog} {
set pat$i abc
puts "pat$i=${pat$i}"
set i [expr {$i + 1}]
}
Run Code Online (Sandbox Code Playgroud)

我在每个循环中想要的期望结果是:

pat0=abc
pat1=abc
pat2=abc
pat3=abc
Run Code Online (Sandbox Code Playgroud)

请帮助我找出我的错误

Don*_*ows 5

您可以使用单参数形式读取具有计算名称的变量set

set i 0
foreach pattern { tiger cat horse dog} {
    set pat$i abc
    puts "pat$i=[set pat$i]"
    set i [expr {$i + 1}]
}
Run Code Online (Sandbox Code Playgroud)

语法$...可以被认为是它的简写(除了不同的、更有限的解析规则,这使得编写更方便)。

或者,您可以使用upvar 0简单的名称创建变量别名:

set i 0
foreach pattern { tiger cat horse dog} {
    upvar 0 pat$i p

    set p abc
    puts "pat$i=$p"
    set i [expr {$i + 1}]
}
Run Code Online (Sandbox Code Playgroud)

这在手术中更受青睐。

但是,确定需要调用该变量吗?您可以使用关联数组来代替吗?这通常同样方便。

set i 0
foreach pattern { tiger cat horse dog} {
    set pat($i) abc
    puts "pat$i=$pat($i)"
    incr i;                      # The incr command is *right there*
}
Run Code Online (Sandbox Code Playgroud)