TclとC++を使用して構築されたns-2と呼ばれる離散イベントシミュレーターを使用しています。私は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または私のコードに問題があるかどうかわかりません...