我正在尝试运行以下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"
答案 0 :(得分:1)
您当前的主要问题是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)
}}
从语义上讲,这是相同的,但是它使作者真正想的清楚了。