【Tcl/tk】用条件判断改变变量值之upvar用法

    

     Tcl只支持参数的传值调用。当调用Tcl的命令时,是复制参数的指然后将其传给命令的。而Upvar函数提供访问当前过程的上下文范围之外的变量的通用机制。可以用于访问全局变量、命名空间变量以及其他活动中的过程内的局部变量。最常见的作用是模拟传引用调用的行为。


     例如这个例子:

        name是一个 过程所需的参数,如果name所表示的不是一个值,而是一个变量,那么就可以用upvar取出对应表示的变量的值,如下面代码所示:

proc error_change {name} \

 {

 upvar 1 $name a1

 puts $name

 puts $a1

 if {[string match Unable* $a1] == 1} {

 set a1 0

 } else {

 puts "Nothing changed"

 }


        upvar 1 $name a1 中的 upvar 1代表需要传递的值的递进为1,即指只需要进行1次值的传递。当然这也是最常用的,目前我还没有遇到过多次传递的需求。同样的情况,upvar在数组参与过程时候显得特别有用:

如果a 是一个数组,就不能像myproc $a这样把它传给myproc过程,因为并没有对应整个数组的值;只有对应各个数组元素的值。但是,可以把数组的名字传给过程,如myproc a,然后使用upvar命令在过程中访问数组的元素。


你可能感兴趣的:(Tcl/Tk)