我正在使用名为ns-2的使用Tcl和C++构建的离散事件模拟器。我试图写一些代码在TCL:无法更改变量的值
set ns [new Simulator]
set state 0
$ns at 0.0 "puts \"At 0.0 value of state is: $state\""
$ns at 1.0 "changeVal"
$ns at 2.0 "puts \"At 2.0 values of state is: $state\""
proc changeVal {} {
global state
global ns
$ns at-now "set state [expr $state+1]"
puts "Changed value of state to $state"
}
$ns run
下面是输出:
At 0.0 value of state is: 0
Changed value of state to 0
At 2.0 values of state is: 0
状态的价值似乎并没有改变。我不确定我是否在使用TCL方面做错了什么。任何人都有一个想法,可能会出现什么问题?
编辑:谢谢你的帮助。实际上,ns-2是我无法控制的东西(除非我自己重新编译模拟器)。我尝试了建议和这里的输出:
的代码:
set ns [new Simulator]
set state 0
$ns at 0.0 "puts \"At 0.0 value of state is: $state\""
$ns at 1.0 "changeVal"
$ns at 9.0 "puts \"At 2.0 values of state is: $state\""
proc changeVal {} {
global ns
set ::state [expr {$::state+1}]
$ns at-now "puts \"At [$ns now] changed value of state to $::state\""
}
$ns run
输出为:
At 0.0 value of state is: 0
At 1 changed value of state to 1
At 2.0 values of state is: 0
而对于代码:
set ns [new Simulator]
set state 0
$ns at 0.0 "puts \"At 0.0 value of state is: $state\""
$ns at 1.0 "changeVal"
$ns at 9.0 "puts \"At 2.0 values of state is: $state\""
proc changeVal {} {
global ns
set ::state [expr {$::state+1}]
$ns at 1.0 {puts "At 1.0 values of state is: $::state"}
}
$ns run
输出是:
At 0.0 value of state is: 0
At 1.0 values of state is: 1
At 2.0 values of state is: 0
似乎不工作...不知道它与NS2和我的代码有问题...
您是否考虑过'incr state'而不是'set state [expr {$ state + 1}]'? – 2010-03-29 15:37:56
是的。刚刚尝试过......似乎没有工作。 – Legend 2010-03-29 15:44:29
它应该与全球参考 – 2010-03-29 23:10:33