如何使用两个$来创建新变量

时间:2014-01-29 04:29:30

标签: tcl

我的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 个答案:

答案 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

应该工作。