我怎样才能使用" eval" TCL的程序?

时间:2017-03-03 08:56:12

标签: tcl ns2

以下代码中eval的含义是什么?

proc poissontraffic { src dst interval starttime } {
   global ns_ node_
   set udp($src) [new Agent/UDP]
   eval $ns_ attach-agent \$node_($src) \$udp($src)
   set null($dst) [new Agent/Null]
   eval $ns_ attach-agent \$node_($dst) \$null($dst)
   set expl($src) [new Application/Traffic/Exponential]
   eval \$expl($src) set packetSize_ 70
   eval \$expl($src) set burst_time_ 0
                                    # idle_time + pkt_tx_time = interval
   eval \$expl($src) set idle_time_ [expr $interval*1000.0-70.0*8/250]ms
   eval \$expl($src) set rate_ 250k
   eval \$expl($src) attach-agent \$udp($src)
   eval $ns_ connect \$udp($src) \$null($dst)
   $ns_ at $starttime "$expl($src) start"
}

1 个答案:

答案 0 :(得分:1)

eval命令连接其参数, eval 将生成的字符串作为Tcl脚本。连接是通过从每个参数的任一端剥离空格然后将它们连接在一起来完成的。

在给定的代码中,例如,

eval $ns_ connect \$udp($src) \$null($dst)

有效地执行两轮替换,一次填写$ns_$src$dst,再次阅读$udp(...)$null(...)和运行命令。

您可以将其替换为:

$ns_ connect $udp($src) $null($dst)

如果$ns_是多字值,那只会是一个问题。由于这基本上是OTcl,其中对象名称通常表现良好,它可能不是,并且所有eval将添加的是混乱,缓慢和不安全。