我正在尝试运行以下 tcl 脚本,但收到错误
can't set "val": variable is array
while executing
"set val [random_int $upper_limit]"
这是我的代码,请任何帮助
proc random_int { upper_limit } {
global myrand
set myrand [expr int(rand() * $upper_limit + 1)]
return $myrand
}
set upper_limit 21
set val [random_int $upper_limit]
$ns at 0.6 "[$node($val) set ragent_] malicious"
您当前的主要问题是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)
}}
它在语义上是相同的,但它更清楚地表明了作者的真实想法。