0
for {set i 0} {$i < $num_nodes} {incr i} {
   for {set j 0} {$j < 10} {incr j} {
     $ns at [expr 7.2+[expr rand()*3.0]] "$n($i) send_message 10 1 {[expr round([expr rand()*100000])]:[expr round([expr rand()*$numdata1])]:1:-1:-1} $MESSAGE_PORT"
     set generated1 [expr $generated1 + 1]
   }
}

我正在为 tcl ns2 中的请求数据包生成构建代码。我从互联网上找到了这些行,但我无法理解这一行:

$ns at [expr 7.2+[expr rand()*3.0]] "$n($i) send_message 10 1 {[expr round([expr rand()*100000])]:[expr round([expr rand()*$numdata1])]:1:-1:-1} $MESSAGE_PORT" 

请告诉我以上这些行背后的逻辑是什么?

4

1 回答 1

0

首先,嵌套的使用不好expr。清理它:

 $ns at [expr {7.2+rand()*3.0}] "$n($i) send_message 10 1 {[expr {round(rand()*100000)}]:[expr {round(rand()*$numdata1)}]:1:-1:-1} $MESSAGE_PORT"

一个字一个字地看:

  • $ns
  • at
  • [expr {7.2+rand()*3.0}]
    • 一个介于 7.2 和 10.2 之间的随机浮点值
  • "$n($i) send_message 10 1 {[expr {round(rand()*100000)}]:[expr {round(rand()*$numdata1)}]:1:-1:-1} $MESSAGE_PORT"
    • 受变量和命令替换的引用字符串(参见Tcl(n)手册页)
    • 进一步看,我们有:
      • $n($i)<== 键处的关联数组值$i
      • [expr {round(rand()*100000)}]<== 0 到 100,000 之间的随机整数
      • [expr {round(rand()*$numdata1)}]<== 0 和之间的随机整数$numdata1

在 Tcl 替换所有这些之后,我们可能会有类似的东西

nsValue at 9.99934 "nValue send_message 10 1 {42:1234:1:-1:1} 8080"
于 2017-02-10T16:27:40.043 回答