0

以下代码

#Create a simulator object
set ns [new Simulator]
#Open the nam trace file
set nf[open out.nam w]
$ns namtrace-all $nf
#Define a 'finish' procedure
proc finish {} {
global ns nf
$ns flush-trace
#Close the trace file
close $nf
#Execute namon the trace file
exec nam–a out.nam&
exit 0
}
#Create two nodes
set n0 [$ns node]
set n1 [$ns node]
#Create a duplex link between the nodes
$ns duplex-link $n0 $n1 1Mb 10ms DropTail
#Call the finish procedure after 5 seconds of simulation time
$ns at 5.0 "finish"
#Run the simulation
$ns run

产生此错误

can't read "nffile5": no such variable
    while executing
"set nf[open out.nam w]"
    (file "Desktop/sample.tcl" line 4)

这是我第一次来 tcl。那么有什么问题。我只是通过以下语句运行它:> ns sample.tcl

4

1 回答 1

2

您在变量名后缺少一个空格:

set nf [open out.nam w]

Tcl 非常依赖于正确使用空白。整个语言可以用 12 条规则来描述,这里列出。规则 3:“命令的单词由空格分隔(换行符除外,它是命令分隔符)。”

您的脚本中实际发生了什么:

  • Tcl 将命令分解为 2 个单词:命令set和参数nf[open out.nam w]
  • 括号中的命令被执行,结果(返回的文件句柄名称是file5)被替换。
  • set命令使用它的一个参数执行,nffile5
    • 当给定一个参数时,set 命令将返回给定变量的值。
    • 由于您从未使用该名称分配变量,因此set返回错误。
于 2013-06-15T02:32:26.023 回答