'\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: uplevel.n,v 1.2 2003/11/24 05:10:00 bbbush Exp $ '\" '\" The definitions below are for supplemental macros used in Tcl/Tk '\" manual entries. '\" '\" .AP type name in/out ?indent? '\" Start paragraph describing an argument to a library procedure. '\" type is type of argument (int, etc.), in/out is either "in", "out", '\" or "in/out" to describe whether procedure reads or modifies arg, '\" and indent is equivalent to second arg of .IP (shouldn't ever be '\" needed; use .AS below instead) '\" '\" .AS ?type? ?name? '\" Give maximum sizes of arguments for setting tab stops. Type and '\" name are examples of largest possible arguments that will be passed '\" to .AP later. If args are omitted, default tab stops are used. '\" '\" .BS '\" Start box enclosure. From here until next .BE, everything will be '\" enclosed in one large box. '\" '\" .BE '\" End of box enclosure. '\" '\" .CS '\" Begin code excerpt. '\" '\" .CE '\" End code excerpt. '\" '\" .VS ?version? ?br? '\" Begin vertical sidebar, for use in marking newly-changed parts '\" of man pages. The first argument is ignored and used for recording '\" the version when the .VS was added, so that the sidebars can be '\" found and removed when they reach a certain age. If another argument '\" is present, then a line break is forced before starting the sidebar. '\" '\" .VE '\" End of vertical sidebar. '\" '\" .DS '\" Begin an indented unfilled display. '\" '\" .DE '\" End of indented unfilled display. '\" '\" .SO '\" Start of list of standard options for a Tk widget. The '\" options follow on successive lines, in four columns separated '\" by tabs. '\" '\" .SE '\" End of list of standard options for a Tk widget. '\" '\" .OP cmdName dbName dbClass '\" Start of description of a specific option. cmdName gives the '\" option's name as specified in the class command, dbName gives '\" the option's name in the option database, and dbClass gives '\" the option's class in the option database. '\" '\" .UL arg1 arg2 '\" Print arg1 underlined, then print arg2 normally. '\" '\" RCS: @(#) $Id: uplevel.n,v 1.2 2003/11/24 05:10:00 bbbush Exp $ '\" '\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages. .if t .wh -1.3i ^B .nr ^l \n(.l .ad b '\" # Start an argument description .de AP .ie !"\\$4"" .TP \\$4 .el \{\ . ie !"\\$2"" .TP \\n()Cu . el .TP 15 .\} .ta \\n()Au \\n()Bu .ie !"\\$3"" \{\ \&\\$1 \\fI\\$2\\fP (\\$3) .\".b .\} .el \{\ .br .ie !"\\$2"" \{\ \&\\$1 \\fI\\$2\\fP .\} .el \{\ \&\\fI\\$1\\fP .\} .\} .. '\" # define tabbing values for .AP .de AS .nr )A 10n .if !"\\$1"" .nr )A \\w'\\$1'u+3n .nr )B \\n()Au+15n .\" .if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n .nr )C \\n()Bu+\\w'(in/out)'u+2n .. .AS Tcl_Interp Tcl_CreateInterp in/out '\" # BS - start boxed text '\" # ^y = starting y location '\" # ^b = 1 .de BS .br .mk ^y .nr ^b 1u .if n .nf .if n .ti 0 .if n \l'\\n(.lu\(ul' .if n .fi .. '\" # BE - end boxed text (draw box now) .de BE .nf .ti 0 .mk ^t .ie n \l'\\n(^lu\(ul' .el \{\ .\" Draw four-sided box normally, but don't draw top of .\" box if the box started on an earlier page. .ie !\\n(^b-1 \{\ \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' .\} .el \}\ \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' .\} .\} .fi .br .nr ^b 0 .. '\" # VS - start vertical sidebar '\" # ^Y = starting y location '\" # ^v = 1 (for troff; for nroff this doesn't matter) .de VS .if !"\\$2"" .br .mk ^Y .ie n 'mc \s12\(br\s0 .el .nr ^v 1u .. '\" # VE - end of vertical sidebar .de VE .ie n 'mc .el \{\ .ev 2 .nf .ti 0 .mk ^t \h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n' .sp -1 .fi .ev .\} .nr ^v 0 .. '\" # Special macro to handle page bottom: finish off current '\" # box/sidebar if in box/sidebar mode, then invoked standard '\" # page bottom macro. .de ^B .ev 2 'ti 0 'nf .mk ^t .if \\n(^b \{\ .\" Draw three-sided box if this is the box's first page, .\" draw two sides but no top otherwise. .ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c .el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c .\} .if \\n(^v \{\ .nr ^x \\n(^tu+1v-\\n(^Yu \kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c .\} .bp 'fi .ev .if \\n(^b \{\ .mk ^y .nr ^b 2 .\} .if \\n(^v \{\ .mk ^Y .\} .. '\" # DS - begin display .de DS .RS .nf .sp .. '\" # DE - end display .de DE .fi .RE .sp .. '\" # SO - start of list of standard options .de SO .SH "STANDARD OPTIONS" .LP .nf .ta 5.5c 11c .ft B .. '\" # SE - end of list of standard options .de SE .fi .ft R .LP See the \\fBoptions\\fR manual entry for details on the standard options. .. '\" # OP - start of full description for a single option .de OP .LP .nf .ta 4c Command-Line Name: \\fB\\$1\\fR Database Name: \\fB\\$2\\fR Database Class: \\fB\\$3\\fR .fi .IP .. '\" # CS - begin code excerpt .de CS .RS .nf .ta .25i .5i .75i 1i .. '\" # CE - end code excerpt .de CE .fi .RE .. .de UL \\$1\l'|0\(ul'\\$2 .. .TH uplevel 3tcl "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME uplevel \- 在一個不同的棧楨中執行一個指令碼 .SH "總覽 SYNOPSIS" \fBuplevel \fR?\fIlevel\fR?\fI arg \fR?\fIarg ...\fR? .BE .SH "描述 DESCRIPTION" .PP 串聯所有 \fIarg\fR 引數如同把它們傳遞給 \fBconcat\fR 一樣;接著在用 \fIlevel\fR 指示出的變數上下文中對結果進行求值。\fBUplevel\fR 返回這次求值的結果。 .PP 如果 \fIlevel\fR 是一個整數則它給出執行這個命令之前要移動的距離(在過程呼叫棧上)。如果\fIlevel\fR 由 \fB#\fR 和隨後的一個數字組成,則這個數字給出一個絕對的層次數。如果省略了 \fIlevel\fR 則它預設為 \fB1\fR。如果第一個 \fIcommand\fR 引數以一個數字或 \fB#\fR 則不能預設 \fILevel\fR。 .PP 例如,假設從頂層呼叫過程 \fBa\fR,而它呼叫 \fBb\fR,接著\fBb\fR 呼叫 \fBc\fR。假設 \fBc\fR 呼叫了 \fBuplevel\fR 命令。如果 \fIlevel\fR 是 \fB1\fR 或 \fB#2\fR 或被省略了,則命令將在 \fBb\fR 的變數上下文中在執行。如果 \fIlevel\fR 是 \fB2\fR 或 \fB#1\fR 則命令將在 \fBa\fR 的變數上下文中執行。如果 \fIlevel\fR 是 \fB3\fR 或 \fB#0\fR 則命令將在頂層執行(只有全域性變數是可見的)。 .PP \fBuplevel\fR 命令導致呼叫它的過程在命令執行的時候從過程呼叫棧中消失。在上面的例子中,假設 \fBc\fR 呼叫了命令 .CS \fBuplevel 1 {set x 43; d}\fR .CE 這裡的 \fBd\fR 是另一個 Tcl 過程。\fBset\fR 命令將修改在 \fBb \fR的上下文中的變數 \fBx\fR ,而 \fBd\fR 將在層次 3 上執行,如同從 \fBb\fR 呼叫它一樣。如果 \fBd\fR 接著執行命令 .CS \fBuplevel {set x 42}\fR .CE 則 \fBset\fR 命令將修改在 \fBb \fR的上下文中的同一個變數 \fBx\fR: 在 \fBd\fR 執行的時候過程 \fBc\fR 在呼叫棧上不出現。可以使用命令“\fBinfo level\fR”來獲得當前過程的層次。 .PP \fBUplevel\fR 使實現如同 Tcl 過程的新控制結構成為可能(例如,可以使用 \fBuplevel\fR 把 \fBwhile\fR 構造實現為一個 Tcl 過程)。 .PP namespace eval 是改變 Tcl 命令上下文的另一種方式(除了過程呼叫之外)。它向棧增加一個呼叫楨來表示名字空間上下文。這意味著每個 namespace eval 命令被視為給 \fBuplevel\fR 和 \fBupvar\fR 命令的另一個呼叫層次。例如,info level 1 將返回描述一個命令的列表,它要麼是最外的過程要麼是最外的 namespace eval 命令。還有,uplevel #0 在最外面的名字空間(全域性名字空間)中的頂層求值一個指令碼。 .SH "參見 SEE ALSO" namespace(n), upvar(n) .SH "關鍵字 KEYWORDS" context, level, namespace, stack frame, variables .SH "[中文版維護人]" .B 寒蟬退士 .SH "[中文版最新更新]" .B 2001/11/21 .SH "《中國 Linux 論壇 man 手冊頁翻譯計劃》:" .BI http://cmpp.linuxforum.net .SH "跋" .br 本頁面中文版由中文 man 手冊頁計劃提供。 .br 中文 man 手冊頁計劃:\fBhttps://github.com/man-pages-zh/manpages-zh\fR