Import Tcl-core 8.6.6 (as of svn r86089)
This commit is contained in:
128
doc/proc.n
Normal file
128
doc/proc.n
Normal file
@@ -0,0 +1,128 @@
|
||||
'\"
|
||||
'\" Copyright (c) 1993 The Regents of the University of California.
|
||||
'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
|
||||
'\"
|
||||
'\" See the file "license.terms" for information on usage and redistribution
|
||||
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
'\"
|
||||
.TH proc n "" Tcl "Tcl Built-In Commands"
|
||||
.so man.macros
|
||||
.BS
|
||||
'\" Note: do not modify the .SH NAME line immediately below!
|
||||
.SH NAME
|
||||
proc \- Create a Tcl procedure
|
||||
.SH SYNOPSIS
|
||||
\fBproc \fIname args body\fR
|
||||
.BE
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
The \fBproc\fR command creates a new Tcl procedure named
|
||||
\fIname\fR, replacing
|
||||
any existing command or procedure there may have been by that name.
|
||||
Whenever the new command is invoked, the contents of \fIbody\fR will
|
||||
be executed by the Tcl interpreter.
|
||||
Normally, \fIname\fR is unqualified
|
||||
(does not include the names of any containing namespaces),
|
||||
and the new procedure is created in the current namespace.
|
||||
If \fIname\fR includes any namespace qualifiers,
|
||||
the procedure is created in the specified namespace.
|
||||
\fIArgs\fR specifies the formal arguments to the
|
||||
procedure. It consists of a list, possibly empty, each of whose
|
||||
elements specifies
|
||||
one argument. Each argument specifier is also a list with either
|
||||
one or two fields. If there is only a single field in the specifier
|
||||
then it is the name of the argument; if there are two fields, then
|
||||
the first is the argument name and the second is its default value.
|
||||
Arguments with default values that are followed by non-defaulted
|
||||
arguments become required arguments; enough actual arguments must be
|
||||
supplied to allow all arguments up to and including the last required
|
||||
formal argument.
|
||||
.PP
|
||||
When \fIname\fR is invoked a local variable
|
||||
will be created for each of the formal arguments to the procedure; its
|
||||
value will be the value of corresponding argument in the invoking command
|
||||
or the argument's default value.
|
||||
Actual arguments are assigned to formal arguments strictly in order.
|
||||
Arguments with default values need not be
|
||||
specified in a procedure invocation. However, there must be enough
|
||||
actual arguments for all the
|
||||
formal arguments that do not have defaults, and there must not be any extra
|
||||
actual arguments.
|
||||
Arguments with default values that are followed by non-defaulted
|
||||
arguments become de-facto required arguments, though this may change
|
||||
in a future version of Tcl; portable code should ensure that all
|
||||
optional arguments come after all required arguments.
|
||||
.PP
|
||||
There is one special case to permit procedures with
|
||||
variable numbers of arguments. If the last formal argument has the name
|
||||
.QW \fBargs\fR ,
|
||||
then a call to the procedure may contain more actual arguments
|
||||
than the procedure has formal arguments. In this case, all of the actual arguments
|
||||
starting at the one that would be assigned to \fBargs\fR are combined into
|
||||
a list (as if the \fBlist\fR command had been used); this combined value
|
||||
is assigned to the local variable \fBargs\fR.
|
||||
.PP
|
||||
When \fIbody\fR is being executed, variable names normally refer to
|
||||
local variables, which are created automatically when referenced and
|
||||
deleted when the procedure returns. One local variable is automatically
|
||||
created for each of the procedure's arguments.
|
||||
Other variables can only be accessed by invoking one of the \fBglobal\fR,
|
||||
\fBvariable\fR, \fBupvar\fR or \fBnamespace upvar\fR commands.
|
||||
The current namespace when \fIbody\fR is executed will be the
|
||||
namespace that the procedure's name exists in, which will be the
|
||||
namespace that it was created in unless it has been changed with
|
||||
\fBrename\fR.
|
||||
'\" We may change this! It makes [variable] unstable when renamed and is
|
||||
'\" frankly pretty crazy, but doing it right is harder than it looks.
|
||||
.PP
|
||||
The \fBproc\fR command returns an empty string. When a procedure is
|
||||
invoked, the procedure's return value is the value specified in a
|
||||
\fBreturn\fR command. If the procedure does not execute an explicit
|
||||
\fBreturn\fR, then its return value is the value of the last command
|
||||
executed in the procedure's body.
|
||||
If an error occurs while executing the procedure
|
||||
body, then the procedure-as-a-whole will return that same error.
|
||||
.SH EXAMPLES
|
||||
.PP
|
||||
This is a procedure that takes two arguments and prints both their sum
|
||||
and their product. It also returns the string
|
||||
.QW OK
|
||||
to the caller as an explicit result.
|
||||
.PP
|
||||
.CS
|
||||
\fBproc\fR printSumProduct {x y} {
|
||||
set sum [expr {$x + $y}]
|
||||
set prod [expr {$x * $y}]
|
||||
puts "sum is $sum, product is $prod"
|
||||
return "OK"
|
||||
}
|
||||
.CE
|
||||
.PP
|
||||
This is a procedure that accepts arbitrarily many arguments and prints
|
||||
them out, one by one.
|
||||
.PP
|
||||
.CS
|
||||
\fBproc\fR printArguments args {
|
||||
foreach arg $args {
|
||||
puts $arg
|
||||
}
|
||||
}
|
||||
.CE
|
||||
.PP
|
||||
This procedure is a bit like the \fBincr\fR command, except it
|
||||
multiplies the contents of the named variable by the value, which
|
||||
defaults to \fB2\fR:
|
||||
.PP
|
||||
.CS
|
||||
\fBproc\fR mult {varName {multiplier 2}} {
|
||||
upvar 1 $varName var
|
||||
set var [expr {$var * $multiplier}]
|
||||
}
|
||||
.CE
|
||||
.SH "SEE ALSO"
|
||||
info(n), unknown(n)
|
||||
.SH KEYWORDS
|
||||
argument, procedure
|
||||
'\" Local Variables:
|
||||
'\" mode: nroff
|
||||
'\" End:
|
||||
Reference in New Issue
Block a user