diff options
Diffstat (limited to 'devdocs/elisp/function-cells.html')
| -rw-r--r-- | devdocs/elisp/function-cells.html | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/devdocs/elisp/function-cells.html b/devdocs/elisp/function-cells.html new file mode 100644 index 00000000..6d6f810f --- /dev/null +++ b/devdocs/elisp/function-cells.html @@ -0,0 +1,42 @@ + <h3 class="section">Accessing Function Cell Contents</h3> <p>The <em>function definition</em> of a symbol is the object stored in the function cell of the symbol. The functions described here access, test, and set the function cell of symbols. </p> <p>See also the function <code>indirect-function</code>. See <a href="function-indirection#Definition-of-indirect_002dfunction">Definition of indirect-function</a>. </p> <dl> <dt id="symbol-function">Function: <strong>symbol-function</strong> <em>symbol</em> +</dt> <dd> + <p>This returns the object in the function cell of <var>symbol</var>. It does not check that the returned object is a legitimate function. </p> <p>If the function cell is void, the return value is <code>nil</code>. To distinguish between a function cell that is void and one set to <code>nil</code>, use <code>fboundp</code> (see below). </p> <div class="example"> <pre class="example">(defun bar (n) (+ n 2)) +(symbol-function 'bar) + ⇒ (lambda (n) (+ n 2)) +</pre> +<pre class="example">(fset 'baz 'bar) + ⇒ bar +</pre> +<pre class="example">(symbol-function 'baz) + ⇒ bar +</pre> +</div> </dd> +</dl> <p>If you have never given a symbol any function definition, we say that that symbol’s function cell is <em>void</em>. In other words, the function cell does not have any Lisp object in it. If you try to call the symbol as a function, Emacs signals a <code>void-function</code> error. </p> <p>Note that void is not the same as <code>nil</code> or the symbol <code>void</code>. The symbols <code>nil</code> and <code>void</code> are Lisp objects, and can be stored into a function cell just as any other object can be (and they can be valid functions if you define them in turn with <code>defun</code>). A void function cell contains no object whatsoever. </p> <p>You can test the voidness of a symbol’s function definition with <code>fboundp</code>. After you have given a symbol a function definition, you can make it void once more using <code>fmakunbound</code>. </p> <dl> <dt id="fboundp">Function: <strong>fboundp</strong> <em>symbol</em> +</dt> <dd><p>This function returns <code>t</code> if the symbol has an object in its function cell, <code>nil</code> otherwise. It does not check that the object is a legitimate function. </p></dd> +</dl> <dl> <dt id="fmakunbound">Function: <strong>fmakunbound</strong> <em>symbol</em> +</dt> <dd> +<p>This function makes <var>symbol</var>’s function cell void, so that a subsequent attempt to access this cell will cause a <code>void-function</code> error. It returns <var>symbol</var>. (See also <code>makunbound</code>, in <a href="void-variables">Void Variables</a>.) </p> <div class="example"> <pre class="example">(defun foo (x) x) +(foo 1) + ⇒1 +</pre> +<pre class="example">(fmakunbound 'foo) + ⇒ foo +</pre> +<pre class="example">(foo 1) +error→ Symbol's function definition is void: foo +</pre> +</div> </dd> +</dl> <dl> <dt id="fset">Function: <strong>fset</strong> <em>symbol definition</em> +</dt> <dd> +<p>This function stores <var>definition</var> in the function cell of <var>symbol</var>. The result is <var>definition</var>. Normally <var>definition</var> should be a function or the name of a function, but this is not checked. The argument <var>symbol</var> is an ordinary evaluated argument. </p> <p>The primary use of this function is as a subroutine by constructs that define or alter functions, like <code>defun</code> or <code>advice-add</code> (see <a href="advising-functions">Advising Functions</a>). You can also use it to give a symbol a function definition that is not a function, e.g., a keyboard macro (see <a href="keyboard-macros">Keyboard Macros</a>): </p> <div class="example"> <pre class="example">;; <span class="roman">Define a named keyboard macro.</span> +(fset 'kill-two-lines "\^u2\^k") + ⇒ "\^u2\^k" +</pre> +</div> <p>If you wish to use <code>fset</code> to make an alternate name for a function, consider using <code>defalias</code> instead. See <a href="defining-functions#Definition-of-defalias">Definition of defalias</a>. </p> +</dd> +</dl><div class="_attribution"> + <p class="_attribution-p"> + Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc. <br>Licensed under the GNU GPL license.<br> + <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Function-Cells.html" class="_attribution-link">https://www.gnu.org/software/emacs/manual/html_node/elisp/Function-Cells.html</a> + </p> +</div> |
