在ns-2的TCL脚本中为节点分配随机数:ERROR变量为array

时间:2018-10-22 10:31:59

标签: tcl ns2

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

1 个答案:

答案 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)
}}

从语义上讲,这是相同的,但是它使作者真正想的清楚了。