NAME¶
uplevel -
在一个不同的栈桢中执行一个脚本
总览 SYNOPSIS¶
uplevel ?
level?
arg ?
arg ...?
描述 DESCRIPTION¶
串联所有
arg
参数如同把它们传递给
concat 一样;接着在用
level
指示出的变量上下文中对结果进行求值。
Uplevel
返回这次求值的结果。
如果
level
是一个整数则它给出执行这个命令之前要移动的距离(在过程调用栈上)。如果
level 由
#
和随后的一个数字组成,则这个数字给出一个绝对的层次数。如果省略了
level 则它缺省为
1。如果第一个
command
参数以一个数字或
#
则不能缺省
Level。
例如,假设从顶层调用过程
a,而它调用
b,接着
b 调用
c。假设
c 调用了
uplevel 命令。如果
level 是
1 或
#2
或被省略了,则命令将在
b
的变量上下文中在执行。如果
level 是
2 或
#1
则命令将在
a
的变量上下文中执行。如果
level 是
3 或
#0
则命令将在顶层执行(只有全局变量是可见的)。
uplevel
命令导致调用它的过程在命令执行的时候从过程调用栈中消失。在上面的例子中,假设
c 调用了命令
这里的
d 是另一个 Tcl
过程。
set
命令将修改在
b
的上下文中的变量
x
,而
d 将在层次 3
上执行,如同从
b
调用它一样。如果
d
接着执行命令
则
set 命令将修改在
b
的上下文中的同一个变量
x: 在
d
执行的时候过程
c
在调用栈上不出现。可以使用命令“
info
level”来获得当前过程的层次。
Uplevel 使实现如同 Tcl
过程的新控制结构成为可能(例如,可以使用
uplevel 把
while
构造实现为一个 Tcl
过程)。
namespace eval 是改变 Tcl
命令上下文的另一种方式(除了过程调用之外)。它向栈增加一个调用桢来表示名字空间上下文。这意味着每个
namespace eval 命令被视为给
uplevel
和
upvar
命令的另一个调用层次。例如,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