diff options
author | dgp <dgp@users.sourceforge.net> | 2006-02-01 19:26:00 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2006-02-01 19:26:00 (GMT) |
commit | fe312f9881e59765486f5f1d6314a5f1e0050875 (patch) | |
tree | cc5102e7480d80257995c473101cfae3119a3f13 /doc/apply.n | |
parent | bf2e20ec8703a3c6e725e464bb4e7fca8af0834c (diff) | |
download | tcl-fe312f9881e59765486f5f1d6314a5f1e0050875.zip tcl-fe312f9881e59765486f5f1d6314a5f1e0050875.tar.gz tcl-fe312f9881e59765486f5f1d6314a5f1e0050875.tar.bz2 |
TIP#194 IMPLEMENTATION
* doc/apply.n: (New file) New command [apply]. [Patch 944803].
* doc/uplevel.n:
* generic/tclBasic.c:
* generic/tclInt.h:
* generic/tclProc.c:
* tests/apply.test: (New file)
* tests/proc-old.test:
* tests/proc.test:
Diffstat (limited to 'doc/apply.n')
-rw-r--r-- | doc/apply.n | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/doc/apply.n b/doc/apply.n new file mode 100644 index 0000000..31099ce --- /dev/null +++ b/doc/apply.n @@ -0,0 +1,67 @@ +'\" +.so man.macros +.TH apply n "" Tcl "Tcl Built-In Commands" +.BS +'\" Note: do not modify the .SH NAME line immediately below! +.SH NAME +apply \- Apply an anonymous function +.SH SYNOPSIS +\fBapply \fIfunc\fR ?\fIarg1 arg2 ...\fR? +.BE + +.SH DESCRIPTION +.PP +The command \fBapply\fR applies the function \fIfunc\fR to the arguments +\fIarg1 arg2 ...\fR and returns the result. +.PP +The function \fIfunc\fR is a two element list \fI{args body}\fR or a three +element list \fI{args body namespace}\fR (as if the +\fBlist\fR command had been used). +The first element \fIargs\fR specifies the formal arguments to +\fIfunc\fR. The specification of the formal arguments \fIargs\fR +is shared with the \fBproc\fR command, and is described in detail in the +corresponding manual page. +.PP +The contents of \fIbody\fR are executed by the Tcl interpreter +after the local variables corresponding to the formal arguments are given +the values of the actual parameters \fIarg1 arg2 ...\fR. +When \fIbody\fR is being executed, variable names normally refer to +local variables, which are created automatically when referenced and +deleted when \fBapply\fR returns. One local variable is automatically +created for each of the function's arguments. +Global variables can only be accessed by invoking +the \fBglobal\fR command or the \fBupvar\fR command. +Namespace variables can only be accessed by invoking +the \fBvariable\fR command or the \fBupvar\fR command. +.PP +The invocation of \fBapply\fR adds a call frame to Tcl's evaluation stack +(the stack of frames accessed via \fBuplevel\fR). The execution of \fIbody\fR +proceeds in this call frame, in the namespace given by \fInamespace\fR or +in the global namespace if none was specified. If given, \fInamespace\fR is +interpreted relative to the global namespace even if its name does not start +with '::'. +.PP +The semantics of \fBapply\fR can also be described by: +.PP +.CS + proc apply {fun args} { + set len [llength $fun] + if {($len < 2) || ($len > 3)} { + error "can't interpret \\"$fun\\" as anonymous function" + } + lassign $fun argList body ns + set name ::$ns::[getGloballyUniqueName] + set body0 { + rename [lindex [info level 0] 0] {} + } + proc $name $argList ${body0}$body + set code [catch {uplevel 1 $name $args} res opt] + return -options $opt $res + } +.CE + +.SH "SEE ALSO" +proc(n), uplevel(n) + +.SH KEYWORDS +argument, procedure, anonymous function |