我正在尝试运行以下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" 发布于 2018-10-23 15:38:13
您当前的主要问题是存在将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)
}}它在语义上是相同的,但它使作者真正在想什么变得更加清晰。
https://stackoverflow.com/questions/52927232
复制相似问题