我的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
答案 0 :(得分:2)
当你只将一个参数传递给set
时,它会读取命名变量(而不是写入它,这是传递两个参数时会发生的情况)。
$ns attach-agent [set n$i] $tcp1
如您所知,如果您这样做,那么您可能应该使用数组代替。这真的很简单。
另一种可能性(棘手传入!)是使用简单的文字名称创建一个本地别名变量:
upvar 0 n$i thisN
$ns attach-agent $thisN $tcp1
请注意,一旦使用upvar 0
,除非通过结束包含别名变量的上下文(堆栈帧,命名空间),否则无法使该别名变量成为普通变量。但是,您可以再次使用upvar 0
将别名重定向到另一个变量。
答案 1 :(得分:1)
$ns attach-agent [set n$i] $tcp1
应该工作。