uplevel.n
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1993 The Regents of the University of California.
  3. '" Copyright (c) 1994-1997 Sun Microsystems, Inc.
  4. '"
  5. '" See the file "license.terms" for information on usage and redistribution
  6. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  7. '" 
  8. '" RCS: @(#) $Id: uplevel.n,v 1.3.18.1 2004/10/27 14:43:15 dkf Exp $
  9. '" 
  10. .so man.macros
  11. .TH uplevel n "" Tcl "Tcl Built-In Commands"
  12. .BS
  13. '" Note:  do not modify the .SH NAME line immediately below!
  14. .SH NAME
  15. uplevel - Execute a script in a different stack frame
  16. .SH SYNOPSIS
  17. fBuplevel fR?fIlevelfR?fI arg fR?fIarg ...fR?
  18. .BE
  19. .SH DESCRIPTION
  20. .PP
  21. All of the fIargfR arguments are concatenated as if they had
  22. been passed to fBconcatfR; the result is then evaluated in the
  23. variable context indicated by fIlevelfR.  fBUplevelfR returns
  24. the result of that evaluation.
  25. .PP
  26. If fIlevelfR is an integer then
  27. it gives a distance (up the procedure calling stack) to move before
  28. executing the command.  If fIlevelfR consists of fB#fR followed by
  29. a number then the number gives an absolute level number.  If fIlevelfR
  30. is omitted then it defaults to fB1fR.  fILevelfR cannot be
  31. defaulted if the first fIcommandfR argument starts with a digit or fB#fR.
  32. .PP
  33. For example, suppose that procedure fBafR was invoked
  34. from top-level, and that it called fBbfR, and that fBbfR called fBcfR.
  35. Suppose that fBcfR invokes the fBuplevelfR command.  If fIlevelfR
  36. is fB1fR or fB#2fR  or omitted, then the command will be executed
  37. in the variable context of fBbfR.  If fIlevelfR is fB2fR or fB#1fR
  38. then the command will be executed in the variable context of fBafR.
  39. If fIlevelfR is fB3fR or fB#0fR then the command will be executed
  40. at top-level (only global variables will be visible).
  41. .PP
  42. The fBuplevelfR command causes the invoking procedure to disappear
  43. from the procedure calling stack while the command is being executed.
  44. In the above example, suppose fBcfR invokes the command
  45. .CS
  46. fBuplevelfR 1 {set x 43; d}
  47. .CE
  48. where fBdfR is another Tcl procedure.  The fBsetfR command will
  49. modify the variable fBxfR in fBbfR's context, and fBdfR will execute
  50. at level 3, as if called from fBbfR.  If it in turn executes
  51. the command
  52. .CS
  53. fBuplevelfR {set x 42}
  54. .CE
  55. then the fBsetfR command will modify the same variable fBxfR in fBbfR's
  56. context:  the procedure fBcfR does not appear to be on the call stack
  57. when fBdfR is executing.  The command ``fBinfo levelfR'' may
  58. be used to obtain the level of the current procedure.
  59. .PP
  60. fBUplevelfR makes it possible to implement new control
  61. constructs as Tcl procedures (for example, fBuplevelfR could
  62. be used to implement the fBwhilefR construct as a Tcl procedure).
  63. .PP
  64. fBnamespace evalfR is another way (besides procedure calls)
  65. that the Tcl naming context can change.
  66. It adds a call frame to the stack to represent the namespace context.
  67. This means each fBnamespace evalfR command
  68. counts as another call level for fBuplevelfR and fBupvarfR commands.
  69. For example, fBinfo level 1fR will return a list
  70. describing a command that is either
  71. the outermost procedure call or the outermost fBnamespace evalfR command.
  72. Also, fBuplevel #0fR evaluates a script
  73. at top-level in the outermost namespace (the global namespace).
  74. .SH EXAMPLE
  75. As stated above, the fBuplevelfR command is useful for creating new
  76. control constructs.  This example shows how (without error handling)
  77. it can be used to create a fBdofR command that is the counterpart of
  78. fBwhilefR except for always performing the test after running the
  79. loop body:
  80. .CS
  81. proc do {body while condition} {
  82.     if {$while ne "while"} {
  83.         error "required word missing"
  84.     }
  85.     set conditionCmd [list expr $condition]
  86.     while {1} {
  87.         fBuplevelfR 1 $body
  88.         if {![fBuplevelfR 1 $conditionCmd]} {
  89.             break
  90.         }
  91.     }
  92. }
  93. .CE
  94. .SH "SEE ALSO"
  95. namespace(n), upvar(n)
  96. .SH KEYWORDS
  97. context, level, namespace, stack frame, variables