接受变量名称引用的过程
proc myproc {varName alpha beta} {
upvar 1 $varName var
set var [expr {$var * $alpha + $beta}]
}
set foo 1
myproc foo 10 5
puts $foo
# => 15
在此特定情况下,过程将在当前范围中指定变量的名称。在 Tcl 过程中,这些变量不会自动显示,但 upvar
命令可以为另一个堆栈级别的变量创建别名:1 表示调用者的堆栈级别,#0 表示全局级别,等等。在这种情况下,堆栈级别 1 和名称 foo
(来自参数变量 varName
)让 upvar
找到该变量并创建一个名为 var
的别名。var
上的每个读或写操作也发生在调用者堆栈级别的 foo
中。