Spec-Zone .ru
спецификации, руководства, описания, API
Spec-Zone .ru
спецификации, руководства, описания, API
Библиотека разработчика Mac Разработчик
Поиск

 

Эта страница руководства для  версии 10.9 Mac OS X

Если Вы выполняете различную версию  Mac OS X, просматриваете документацию локально:

Читать страницы руководства

Страницы руководства предназначаются как справочник для людей, уже понимающих технологию.

  • Чтобы изучить, как руководство организовано или узнать о синтаксисе команды, прочитайте страницу руководства для страниц справочника (5).

  • Для получения дополнительной информации об этой технологии, ищите другую документацию в Библиотеке Разработчика Apple.

  • Для получения общей информации о записи сценариев оболочки, считайте Shell, Пишущий сценарий Учебника для начинающих.



return(n)                                   Tcl Built-In Commands                                  return(n)



____________________________________________________________________________________________________________

NAME
       return - Return from a procedure, or set return code of a script

SYNOPSIS
       return ?result?

       return ?-code code? ?result?

       return ?option value ...? ?result?
____________________________________________________________________________________________________________

DESCRIPTION
       In its simplest usage, the return command is used without options in the body of a procedure to imme-diately immediately
       diately return control to the caller of the procedure.  If a result argument is provided,  its  value
       becomes  the  result  of the procedure passed back to the caller.  If result is not specified then an
       empty string will be returned to the caller as the result of the procedure.

       The return command serves a similar function within script files that are  evaluated  by  the  source
       command.   When source evaluates the contents of a file as a script, an invocation of the return com-mand command
       mand will cause script evaluation to immediately cease, and the value result  (or  an  empty  string)
       will be returned as the result of the source command.

EXCEPTIONAL RETURN CODES
       In  addition  to  the result of a procedure, the return code of a procedure may also be set by return
       through use of the -code option.  In the usual case where the -code option is not specified the  pro-cedure procedure
       cedure will return normally.  However, the -code option may be used to generate an exceptional return
       from the procedure.  Code may have any of the following values:

       ok (or 0)    Normal return:  same as if the option is omitted.  The return code of the procedure is 0
                    (TCL_OK).

       error (1)    Error  return: the return code of the procedure is 1 (TCL_ERROR).  The procedure command
                    behaves in its calling context as if it were the command error result.   See  below  for
                    additional options.

       return (2)   The  return  code  of the procedure is 2 (TCL_RETURN).  The procedure command behaves in
                    its calling context as if it were the command return (with no arguments).

       break (3)    The return code of the procedure is 3 (TCL_BREAK).  The procedure command behaves in its
                    calling context as if it were the command break.

       continue (4) The  return code of the procedure is 4 (TCL_CONTINUE).  The procedure command behaves in
                    its calling context as if it were the command continue.

       value        Value must be an integer;  it will be returned as the return code for the current proce-dure. procedure.
                    dure.

       When  a  procedure wants to signal that it has received invalid arguments from its caller, it may use
       return -code error with result set to a suitable error message.  Otherwise usage of the return  -code
       option is mostly limited to procedures that implement a new control structure.

       The return -code command acts similarly within script files that are evaluated by the source command.
       During the evaluation of the contents of a file as a script by source, an invocation  of  the  return
       -code code command will cause the return code of source to be code.

RETURN OPTIONS
       In  addition to a result and a return code, evaluation of a command in Tcl also produces a dictionary |
       of return options.  In general usage, all option value pairs given  as  arguments  to  return  become |
       entries in the return options dictionary, and any values at all are acceptable except as noted below. |
       The catch command may be used to capture all of this information -- the return code, the result,  and |
       the return options dictionary -- that arise from evaluation of a script.

       As  documented  above, the -code entry in the return options dictionary receives special treatment by
       Tcl.  There are other return options also recognized and treated specially by Tcl.  They are:

       -errorcode list
              The -errorcode option receives special treatment only when the value of the  -code  option  is
              TCL_ERROR.   Then  the  list value is meant to be additional information about the error, pre-sented presented
              sented as a Tcl list for further processing by programs.  If no -errorcode option is  provided
              to  return  when  the -code error option is provided, Tcl will set the value of the -errorcode
              entry in the return options dictionary to the default value of NONE.   The  -errorcode  return
              option will also be stored in the global variable errorCode.

       -errorinfo info
              The  -errorinfo  option  receives special treatment only when the value of the -code option is
              TCL_ERROR.  Then info is the initial stack trace, meant to provide to  a  human  reader  addi-tional additional
              tional  information  about the context in which the error occurred.  The stack trace will also
              be stored in the global variable errorInfo.  If no -errorinfo option  is  provided  to  return
              when the -code error option is provided, Tcl will provide its own initial stack trace value in
              the entry for -errorinfo.  Tcl's initial stack trace will include only the call to the  proce-dure, procedure,
              dure, and stack unwinding will append information about higher stack levels, but there will be
              no information about the context of the error within the procedure.  Typically the info  value
              is  supplied from the value of -errorinfo in a return options dictionary captured by the catch
              command (or from the copy of that information stored in the global variable errorInfo).

       -level level
              The -level and -code options work together to set the return code to be returned by one of the |
              commands currently being evaluated.  The level value must be a non-negative integer represent- |
              ing a number of levels on the call stack.  It defines the number of levels  up  the  stack  at |
              which  the  return  code  of a command currently being evaluated should be code.  If no -level |
              option is provided, the default value of level is 1, so that return sets the return code  that |
              the  current  procedure  returns  to  its caller, 1 level up the call stack.  The mechanism by |
              which these options work is described in more detail below.

       -options options
              The value options must be a valid dictionary.  The entries of that dictionary are  treated  as |
              additional option value pairs for the return command.

RETURN CODE HANDLING MECHANISMS
       Return  codes  are  used in Tcl to control program flow.  A Tcl script is a sequence of Tcl commands.
       So long as each command evaluation returns a return code of TCL_OK, evaluation will continue  to  the
       next  command  in the script.  Any exceptional return code (non-TCL_OK) returned by a command evalua-tion evaluation
       tion causes the flow on to the next command to be interrupted.  Script  evaluation  ceases,  and  the
       exceptional return code from the command becomes the return code of the full script evaluation.  This
       is the mechanism by which errors during script evaluation cause an interruption and unwinding of  the
       call stack.  It is also the mechanism by which commands like break, continue, and return cause script
       evaluation to terminate without evaluating all commands in sequence.

       Some of Tcl's built-in commands evaluate scripts as part of their functioning.   These  commands  can
       make  use of exceptional return codes to enable special features.  For example, the built-in Tcl com-mands commands
       mands that provide loops -- such as while, for, and foreach -- evaluate a script that is the body  of
       the  loop.   If evaluation of the loop body returns the return code of TCL_BREAK or TCL_CONTINUE, the
       loop command can react in such a way as to give the break  and  continue  commands  their  documented
       interpretation in loops.

       Procedure  invocation  also  involves  evaluation  of a script, the body of the procedure.  Procedure |
       invocation provides special treatment when evaluation of the procedure body returns the  return  code |
       TCL_RETURN.   In that circumstance, the -level entry in the return options dictionary is decremented. |
       If after decrementing, the value of the -level entry is 0, then the value of the -code entry  becomes |
       the  return  code  of the procedure.  If after decrementing, the value of the -level entry is greater |
       than zero, then the return code of the procedure is TCL_RETURN.  If the procedure invocation occurred |
       during  the  evaluation  of the body of another procedure, the process will repeat itself up the call |
       stack, decrementing the value of the -level entry at each level, so that the code will be the  return |
       code  of  the  current  command level levels up the call stack.  The source command performs the same |
       handling of the TCL_RETURN return code, which explains the similarity of return invocation  during  a |
       source to return invocation within a procedure.                                                       |

       The  return code of the return command itself triggers this special handling by procedure invocation. |
       If return is provided the option -level 0, then the return code of the return command itself will  be |
       the  value  code  of  the -code option (or TCL_OK by default).  Any other value for the -level option |
       (including the default value of 1) will cause the return code of the  return  command  itself  to  be |
       TCL_RETURN, triggering a return from the enclosing procedure.

EXAMPLES
       First,  a simple example of using return to return from a procedure, interrupting the procedure body.
              proc printOneLine {} {
                 puts "line 1"    ;# This line will be printed.
                 return
                 puts "line 2"    ;# This line will not be printed.
              }

       Next, an example of using return to set the value returned by the procedure.
              proc returnX {} {return X}
              puts [returnX]    ;# prints "X"

       Next, a more complete example, using return -code error to report invalid arguments.
              proc factorial {n} {
                 if {![string is integer $n] || ($n < 0)} {
                    return -code error \
                          "expected non-negative integer,\
                           but got \"$n\""
                 }
                 if {$n < 2} {
                    return 1
                 }
                 set m [expr {$n - 1}]
                 set code [catch {factorial $m} factor]
                 if {$code != 0} {
                    return -code $code $factor
                 }
                 set product [expr {$n * $factor}]
                 if {$product < 0} {
                    return -code error \
                          "overflow computing factorial of $n"
                 }
                 return $product
              }

       Next, a procedure replacement for break.
              proc myBreak {} {
                 return -code break
              }

       With the -level 0 option, return itself can serve as a replacement for break.                         |
              interp alias {} Break {} return -level 0 -code break                                           |

       An example of using catch and return -options to re-raise a caught error:                             |
              proc doSomething {} {                                                                          |
                 set resource [allocate]                                                                     |
                 catch {                                                                                     |
                    # Long script of operations                                                              |
                    # that might raise an error                                                              |
                 } result options                                                                            |
                 deallocate $resource                                                                        |
                 return -options $options $result                                                            |
              }                                                                                              |

       Finally an example of advanced use of the return options to create a procedure replacement for return |
       itself:                                                                                               |
              proc myReturn {args} {                                                                         |
                 set result ""                                                                               |
                 if {[llength $args] % 2} {                                                                  |
                    set result [lindex $args end]                                                            |
                    set args [lrange $args 0 end-1]                                                          |
                 }                                                                                           |
                 set options [dict merge {-level 1} $args]                                                   |
                 dict incr options -level                                                                    |
                 return -options $options $result                                                            |
              }                                                                                              |

SEE ALSO
       break(n), catch(n), continue(n), dict(n), error(n), proc(n), source(n), tclvars(n)

KEYWORDS
       break, catch, continue, error, procedure, return



Tcl                                                  8.5                                           return(n)

Сообщение о проблемах

Способ сообщить о проблеме с этой страницей руководства зависит от типа проблемы:

Ошибки содержания
Ошибки отчета в содержании этой документации к проекту Tcl.
Отчеты об ошибках
Сообщите об ошибках в функциональности описанного инструмента или API к Apple через Генератор отчетов Ошибки и к проекту Tcl через их страницу создания отчетов ошибки.
Форматирование проблем
Отчет, форматирующий ошибки в интерактивной версии этих страниц со ссылками на отзыв ниже.