set nf中的tcl错误[open out.nam w]

时间:2013-06-15 01:41:28

标签: tcl ns2

以下代码

#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

1 个答案:

答案 0 :(得分:2)

您在变量名称后缺少空格:

set nf [open out.nam w]

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

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

  • Tcl将命令分为两个单词:命令set和参数nf[open out.nam w]
  • 执行括号中的命令,并替换结果(返回的文件句柄名称为file5)。
  • set命令以其一个参数nffile5执行
    • 当给出单个参数时,set命令将返回给定变量的值。
    • 由于您从未使用该名称分配变量,set会返回错误。