过程中的变量赋值。 TCL

Variable assignment inside procedures. Tcl

我有这个例子:

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(或用于访问范围外的其他命令之一,例如 variableupvar)您使用的变量将 纯粹 局部于过程的堆栈帧。