您可以将数组的名称传递给 proc,然后使用upvar
它来访问它:
proc process_array {arrayName} {
upvar 1 $arrayName myArray
puts "Car is $myArray(CAR)"
}
set CLIENT(CAR) "Koenigsegg"
process_array CLIENT ;# Pass the name of the array, note: no dollar sign
输出:
Car is Koenigsegg
我希望这就是你要找的。
更新
因此,您想将两件事传递给 proc:哈希名称(Tcl 将其称为“数组”)和索引名称(CAR):
proc process_array {arrayName index} {
upvar 1 $arrayName myArray
puts "My array is $arrayName"
puts "List of indices: [array names myArray]"
puts "Car is $myArray($index)"
}
set CLIENT(CAR) "Koenigsegg"
process_array CLIENT CAR;# Pass the name of the array, note: no dollar sign
输出:
My array is CLIENT
List of indices: CAR
Car is Koenigsegg
更新 2
似乎原始海报(OP)要求这样的东西:
process_array $CLIENT(CAR)
并期望 procprocess_array
找出数组的名称 ( CLIENT
) 和索引 ( CAR
)。据我所知,这是不可能的。当 Tcl 解释器遇到上面的行时,它计算$CLIENT(CAR)
表达式并且行变成:
process_array Koenigsegg
这意味着在 内process_array
,proc 不知道任何数组。它只知道有人向它传递了一个字符串"Koenigsegg"。
现在,如果您将数组的名称传递给 proc,那么它可以计算出数组的名称,以及数组具有的任何索引。请看我之前的代码。