如何将数组作为 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 arrayname
和 array 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。
args
是proc
s的特殊变量名,你要么改掉,要么表明你只想迭代第一个参数的元素:
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。
我正在从一个文件中读取一些值,并在一个过程中将它们读取为 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 arrayname
和 array 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。
args
是proc
s的特殊变量名,你要么改掉,要么表明你只想迭代第一个参数的元素:
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。