tcl/tk参考——控制结构uplevel

 .

.

名称

uplevel - 在不同的堆栈层中执行一个脚本

语法

uplevel ?level? arg ?arg ...?

描述

所有的arg变元使用concat命令风格连接起来,连接起来的命令在level指定后的作用域中执行,uplevel返回执行结果。(堆栈层可以看作是变量起作用的范围)

如果level是一个整数,它指出了调用命令的堆栈距离目前调用堆栈的层数,如果level是以#后面加一个数字,那么这个数字就是命令执行的绝对堆栈层,缺省值为1,如果有了#符号那么后面必须跟一个数字。

例如,假设过程a在最高层调用,然后a调用b,再后来b调用c,假设c调用uplevel名令,如果level1或者#2或者忽略掉,这个命令将在b的变量的作用域中执行,如果level2或者#1,那么这个命令将在a的变量的作用域中执行,如果level3或者#0,这个命令将在最高层执行(只有全局变量是可见的)。

uplevel命令导致在调用过程的堆栈层中"看不到"过程了,在下面的例子里,假设c调用命令:

uplevel 1 {set x 43; d}

当d是另外一个过程时,set命令会在b的作用域中修改变量xd将在第三层堆栈运行,就像是b过程调用的d过程。

uplevel {set x 42}

set命令将会修改在b作用域中的x变量,在执行d的时候过程c对于调用堆栈层是不可见的,命令info level可以获得当前程序的堆栈层。

uplevel可以实现新的控制结构,例如,uplevel可以实现while过程。

示例

uplevel命令在实现新的控制结构方面非常有用,下面的例子显示了它可以用来创建一个do命令:

proc do {body while condition} {
    if {$while ne "while"} {
        error "required word missing"
    }
    set conditionCmd [list expr $condition]
    while {1} {
        uplevel 1 $body
        if {![uplevel 1 $conditionCmd]} {
            break
        }
    }
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值