如何将数组作为 TCL 中的参数从一个过程传递到另一个过程

How to pass array as argument in TCL from one proc to another proc

我正在从一个文件中读取一些值,并在一个过程中将它们读取为 data(signal1),data(signal2) - read()。 从这个过程我调用另一个过程 usage_12(data(signal1)) 并想发送 data(signal1) 作为参数并在 usage_12(args)

中使用
proc read() {args} {
    #import data from a file and store {signal1 signal2} data
    usage_12 $data(signal1)
}

proc usage_12 {args} {
   foreach trq $args {
      #iterate for all values
   }
}

想要在 usage_12 中迭代 data(signal1)

中的所有值

data(signal1) 示例内容:

1 2 3 4 5 6

您可以使用 array get arraynamearray set arrayname 来达到这个目的。按照以下步骤完成。

  • 使用 array get arrayname
  • 将数组转换为列表
  • 将列表作为参数传递
  • 如果需要,使用 array set arrayname $list 将列表转换为数组 然后你就可以在过程中使用数组的副本。
proc print_array {key_vals} {
        array set data $key_vals
        foreach key [array names data] {
            puts $data($key)
        }
    }
array set data [list 0 sdf 1 sddsf 2 dssd]
print_array [array get data]

注意:如果您想使用相同的数组,即不是数组的副本,您可以使用upvar。

argsprocs的特殊变量名,你要么改掉,要么表明你只想迭代第一个参数的元素:

proc usage_12 {data} {
    foreach trq $data {
        puts $trq     ;# Just printing the value
        #iterate for all values
    }
}

proc usage_12 {args} {
    foreach trq [lindex $args 0] {
        puts $trq     ;# Just printing the value
        #iterate for all values
    }
}

以上两个都会在各自的行上打印 1 到 6。