Provided by: manpages-zh_1.6.3.6-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

       本頁面中文版由中文 man 手冊頁計劃提供。
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh