在 ns-2 的 TCL 脚本中将随机数分配给节点:ERROR 变量是数组



我正在尝试运行以下 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)
}}

它在语义上是相同的,但它更清楚地表明了作者的真实想法。

相关内容

最新更新