2014-01-29 51 views
1

我有我的TCL代碼,

set n0 [$ns node] 
$n0 set X_ 284 
$n0 set Y_ 380 
$n0 set Z_ 0.0 

$ns initial_node_pos $n0 20 

set n1 [$ns node] 
$n1 set X_ 343 
$n1 set Y_ 195 
$n1 set Z_ 0.0 

$ns initial_node_pos $n1 20 

然後我說for{ } loop分配爲每個節點的TCP連接:

for {set i 0} { $i < 10} {incr i} { 
    set tcp1 [new Agent/TCP] 
    $ns attach-agent $n$i $tcp1 
} 

它顯示錯誤像,

can't read "n": no such variable 
    while executing 
"$ns attach-agent $n$i $tcp1" 
    ("for" body line 4) 
    invoked from within 
"for {set i 0} { $i < 10} {incr i} { 
    set tcp1 [new Agent/TCP] 
    $ns attach-agent $n$i $tcp1 
} 

當我使用$n($i),而不是$n$i它工作正常。有沒有辦法在TCL使用可變$n$i

回答

2

當您通過只有一個參數set,它讀取指定的變量(而不是寫它,這是當你在兩個參數傳遞會發生什麼)。

$ns attach-agent [set n$i] $tcp1 

正如你所知,如果你這樣做,那麼你可能應該使用數組。這真的很簡單。

另一種可能性(!trickiness進入)是創建一個本地別名變量用一個簡單的文本名稱:

upvar 0 n$i thisN 
$ns attach-agent $thisN $tcp1 

要知道,一旦你使用了upvar 0你不能作出這樣的別名變量是一個普通的除了結束包含別名變量的上下文(堆棧幀,名稱空間)外。但是你可以再次使用upvar 0重定向別名另一個變量。

+0

當然,別名可以是陣列或到數組的一個元素。 –

1
$ns attach-agent [set n$i] $tcp1 

應該工作。

相關問題