我有这个例子:
set ns [new Simulator]
set var 0
proc proc1{var}{
set $var 2
}
proc proc2{var}{
puts stdout $var
# I want $var to be 2, but it is 0.
}
$ns at 1 "proc1 $var"
$ns at 5 "proc2 $var"
那么,有人能帮我吗?
您希望使用变量本身,而不是创建计时器回调时获取的内容副本。在这种情况下,不应将变量作为参数传入,而应直接引用全局变量。像这样:
# Omitting the setup parts that are identical...
proc proc1 {} {
global var
set var 2
}
proc proc2 {} {
global var
puts stdout $var
}
$ns at 1 "proc1"
$ns at 5 "proc2"
如果不说global
(或用于在作用域外访问的其他命令之一,如variable
或upvar
),则使用的变量将是过程堆栈框架的纯本地变量。