如何在 tcl proc 中传递多个数组?

How to pass multiple arrays in tcl proc?

enter code here

我想为特定任务将多个数组传递给 tcl proc。

说我有数组名称列表

1
set array_names [list abc pqr xyz]

每个数组包含

1
2
3
4
5
6
7
8
9
10
11
12
array set abc {
      red true
      blue false
      green true
      yellow false
}
array set pqr {
      red false
      blue true
      green false
      yellow true
}

xyz 数组相同

没有 proc 我可以执行以下任务
但需要为相同的

创建一个proc

1
2
3
4
foreach RS $array_names {
   foreach {arr_ind ind_value} [array get $RS] {
       puts"set $RS\\_$arr_ind $ind_value"
}}

会输出

1
2
3
4
5
6
7
8
set abc_yellow false
set abc_blue false
set abc_green true
set abc_red true
set pqr_yellow true
set pqr_blue true
set pqr_green false
set pqr_red false

您可以使用upvar 命令来实现这一点。

1
2
3
4
5
6
7
8
 proc test {array_names} {
        foreach elem $array_names {
                upvar $elem __array
                foreach {arr_ind ind_value} [array get __array] {
                        puts"set $elem\\_$arr_ind $ind_value"
                }
        }
}

调用过程为,

1
test $array_names

参考:upvar