接受变量名称引用的过程

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 中。