如何在TCL中将数组作为参数从一个proc传递到另一个proc

时间:2019-06-27 10:20:34

标签: tcl

我正在从文件中读取一些值,并在一个过程中将它们读取为data(signal1),data(signal2)-read()。 我从此proc调用另一个proc 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

2 个答案:

答案 0 :(得分:2)

argsproc的特殊变量名,您需要更改它,或表明您只想迭代第一个参数的元素:

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。

答案 1 :(得分:0)

您可以为此使用array get arraynamearray set arrayname。通过以下步骤完成。

  • 使用array get arrayname
  • 将数组转换为列表
  • 将列表作为参数传递
  • 如果需要,可以使用array set arrayname $list转换成数组 然后您就可以在proc中使用阵列副本
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。