0

我试图弄清楚如何在以下情况下获取哈希名称和密钥。假设我有以下哈希值:

set CLIENT(CAR) "Koenigsegg"

如果我传入$CLIENT(CAR)proc,则传递的值是“Koenigsegg”。有没有办法同时捕获存储该值的哈希和密钥分别是“CLIENT”和“CAR”这一事实?

例如:

proc foobar {item} {
  set the_item $item 
}

foobar $CLIENT(CAR)

在此示例中,proc 仅接收 $CLIENT(CAR) 的值,即“koenigsegg”。这$item是“koenigsegg”,但我不知道它是什么样的项目。我想获取哈希名称“CLIENT”和密钥“CAR”以知道“koenigsegg”它是“客户汽车”。

4

1 回答 1

4

您可以将数组的名称传递给 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,那么它可以计算出数组的名称,以及数组具有的任何索引。请看我之前的代码。

于 2013-08-11T01:00:11.320 回答