J'utilise un simulateur d'événement discret appelé ns-2 qui a été construit en utilisant Tcl et C++. Je tentais d'écrire du code dans TCL:Impossible de changer la valeur de la variable
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
est ici la sortie:
At 0.0 value of state is: 0
Changed value of state to 0
At 2.0 values of state is: 0
La valeur de l'Etat ne semble pas changer. Je ne suis pas sûr si je fais quelque chose de mal dans l'utilisation de TCL. Quelqu'un a une idée de ce qui pourrait mal se passer ici?
EDIT: Merci pour l'aide. En fait, ns-2 est quelque chose sur lequel je n'ai pas beaucoup de contrôle (sauf si je recompile le simulateur lui-même). J'ai essayé les suggestions et voici la sortie:
pour le code:
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
la sortie est:
At 0.0 value of state is: 0
At 1 changed value of state to 1
At 2.0 values of state is: 0
Et le code:
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
la sortie est:
At 0.0 value of state is: 0
At 1.0 values of state is: 1
At 2.0 values of state is: 0
ne semble pas fonctionner ... Je ne sais pas si son problème avec NS2 ou mon code ...
avez-vous considéré 'incr state' au lieu de' set state [expr {$ state + 1}] '? –
Oui. Juste essayé ... ne semble pas fonctionner. – Legend
il devrait avec les refs globaux –