Provided by: manpages-zh_1.5.2-1.1_all bug

NAME

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

总览 SYNOPSIS

       uplevel ?level? arg ?arg ...?
_________________________________________________________________

描述 DESCRIPTION

       串联所有       arg       参数如同把它们传递给       concat       一样;接着在用      level
       指示出的变量上下文中对结果进行求值。Uplevel 返回这次求值的结果。

       如果 level 是一个整数则它给出执行这个命令之前要移动的距离(在过程调用栈上)。如果level#
       和随后的一个数字组成,则这个数字给出一个绝对的层次数。如果省略了      level     则它缺省为
       1。如果第一个 command 参数以一个数字或 # 则不能缺省 Level。

       例如,假设从顶层调用过程 a,而它调用 b,接着b 调用 c。假设  c  调用了  uplevel  命令。如果
       level1#2  或被省略了,则命令将在 b 的变量上下文中在执行。如果 level2#1
       则命令将在      a      的变量上下文中执行。如果      level3#0
       则命令将在顶层执行(只有全局变量是可见的)。

       uplevel   命令导致调用它的过程在命令执行的时候从过程调用栈中消失。在上面的例子中,假设   c
       调用了命令
              uplevel 1 {set x 43; d}
       这里的 d 是另一个 Tcl 过程。set 命令将修改在  b  的上下文中的变量  x  ,而  d  将在层次  3
       上执行,如同从 b 调用它一样。如果 d 接着执行命令
              uplevel {set x 42}set    命令将修改在    b   的上下文中的同一个变量   x:   在   d   执行的时候过程   c
       在调用栈上不出现。可以使用命令“info level”来获得当前过程的层次。

       Uplevel  使实现如同   Tcl   过程的新控制结构成为可能(例如,可以使用   uplevelwhile
       构造实现为一个 Tcl 过程)。

       namespace                       eval                       是改变                      Tcl
       命令上下文的另一种方式(除了过程调用之外)。它向栈增加一个调用桢来表示名字空间上下文。这意味着每个
       namespace  eval  命令被视为给  uplevelupvar 命令的另一个调用层次。例如,info level 1
       将返回描述一个命令的列表,它要么是最外的过程要么是最外的          namespace           eval
       命令。还有,uplevel #0 在最外面的名字空间(全局名字空间)中的顶层求值一个脚本。

参见 SEE ALSO

       namespace(n), upvar(n)

关键字 KEYWORDS

       context, level, namespace, stack frame, variables

[中文版维护人]

       寒蝉退士

[中文版最新更新]

       2001/11/21

《中国 Linux 论坛 man 手册页翻译计划》:

       http://cmpp.linuxforum.net