首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为ns-2的TCL脚本中的节点分配随机数:错误变量为数组

为ns-2的TCL脚本中的节点分配随机数:错误变量为数组
EN

Stack Overflow用户
提问于 2018-10-22 18:31:59
回答 1查看 368关注 0票数 0

我正在尝试运行以下tcl脚本,但遇到错误

代码语言:javascript
复制
can't set "val": variable is array
    while executing
"set val [random_int $upper_limit]"

这是我的代码,请帮忙

代码语言:javascript
复制
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" 
EN

回答 1

Stack Overflow用户

发布于 2018-10-23 15:38:13

您当前的主要问题是存在将val用作数组的现有用法;Tcl的变量不能同时是标量和数组。最方便的解决方法是更改变量的名称,可能更改为value

代码语言:javascript
复制
set value [random_int $upper_limit]
$ns at 0.6 "[$node($value) set ragent_] malicious" 

除此之外,你的随机数生成器可以是更清晰的代码。它可能不需要访问任何全局变量,并且它确实应该将表达式放在大括号中(出于包括速度和安全性在内的一系列原因)。以下是调整/调整后的版本:

代码语言:javascript
复制
proc random_int { upper_limit } {
    expr { int(rand() * $upper_limit + 1) }
}

偶尔,我会以稍微不同的方式编写这样的过程,如下所示:

代码语言:javascript
复制
proc random_int { upper_limit } {expr {
    int(rand() * $upper_limit + 1)
}}

它在语义上是相同的,但它使作者真正在想什么变得更加清晰。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52927232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档