В настоящее время основная проблема заключается в том, что val
используется как массив;Переменные Tcl не могут быть одновременно скалярами и массивами.Наиболее целесообразным решением является изменение имени переменной, возможно, на value
.
set value [random_int $upper_limit]
$ns at 0.6 "[$node($value) set ragent_] malicious"
Кроме того, ваш генератор случайных чисел может быть немного более четким кодом.Возможно, ему не требуется доступ к каким-либо глобальным переменным, и на самом деле выражение должно быть заключено в фигурные скобки (по ряду причин, включая скорость и безопасность).Вот урезанная / настроенная версия:
proc random_int { upper_limit } {
expr { int(rand() * $upper_limit + 1) }
}
Иногда я пишу такие процедуры немного по-другому, например, так:
proc random_int { upper_limit } {expr {
int(rand() * $upper_limit + 1)
}}
Это семантически идентично, но оно проясняет, что автордействительно думаю о.