Как передать массив в качестве аргумента в TCL от одного процесса к другому процессу - PullRequest
1 голос
/ 27 июня 2019

Я читаю некоторые значения из файла и читаю их как 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)

пример данных (signal1):

1 2 3 4 5 6

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

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 в отдельной строке.

0 голосов
/ 27 июня 2019

Вы можете использовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...