Как мы создаем переменную раковину (5) в скрипте TCL

StackOverflow https://stackoverflow.com/questions/19847532

  •  29-07-2022
  •  | 
  •  

Вопрос

Я использую 20 узла в NS2, я пытаюсь получить доступ к переменным a (0) a (1) a (2) a (3) a (4) с для цикла, как я могу это сделать

Вот мой код

for {set i 0} {$i < $val(nn)} {incr i} {
    set sink($i) [new Agent/LossMonitor]
    $ns attach-agent $n($i) $sink($i)

}

Но он дает ошибку плохой переменной имя "Sink (0)": Upvar не создает скалярную переменную, которая выглядит как элемент массива

Я объявляю переменную следующим образом

proc record {} {
  global sink(0) sink(1) sink(2) sink(3) sink(4) sink(5)
}
Это было полезно?

Решение

Просто используйте

global sink

(Global - это просто особенный upvar кейс)

переменные, которые заканчиваются (...) (ассоциативные) массивы, использование чисел в качестве ключа не рекомендуется, вместо этого лучше использовать список, например,

set mylist {}
# append some elements
lappend mylist "foo" "bar" "baz"
# get the 2nd element
puts [lindex $mylist 1]
# set the 3rd element to "Hello World"
lset mylist 2 "Hello World"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top