以下代码中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"
}
答案 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
将添加的是混乱,缓慢和不安全。