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