2017-03-03 275 views
0

eval在以下代碼中的含義?如何在TCL中使用「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

老兄,是不是更容易閱讀評估手冊頁? – user2141046

回答

1

eval的命令會將其參數和EVAL uates生成的字符串作爲一個Tcl腳本。連接是通過從每個參數的任一端剝離空格,然後將它們連接在一起並在其間放置一個空格來完成的。

在給定的代碼,例如,

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

有效地完成兩個回合換人,一度填補$ns_$src$dst,並再次從$udp(...)$null(...)讀取和運行命令。

你或許可以用此替代它:

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

這隻會是一個問題,如果$ns_是一個多字值。由於這基本上是OTcl,其中對象名稱通常表現良好,因此可能不會,並且所有將會增加的都是混淆,緩慢和不安全。