Next: , Previous: , Up: 関数   [Contents][Index]


13.9 関数セルの内容へのアクセス

シンボルの関数定義(function definition)とは、そのシンボルの関数セルに格納されたオブジェクトのことです。ここではシンボルの関数セルへのアクセスやテスト、それをセットする関数を説明します。

Definition of indirect-functionの関数indirect-functionも参照してください。

Function: symbol-function symbol

これはsymbolの関数セル内のオブジェクトをリターンする。これはリターンされたオブジェクトが本物の関数であるかチェックしない。関数がvoidならリターン値はnil

(defun bar (n) (+ n 2))
(symbol-function 'bar)
     ⇒ #f(lambda (n) [t] (+ n 2))
(fset 'baz 'bar)
     ⇒ bar
(symbol-function 'baz)
     ⇒ bar

シンボルに何の関数定義も与えていなければ、そのシンボルの関数セルはデフォルト値のnilとなり、そのような関数をvoidと呼んでいます。このシンボルを関数として呼びだそうとすると、Emacsはvoid-functionエラーをシグナルします。

変数のvoid(変数がvoidのときを参照)とは異なり、nilを含んだ関数セルをもつシンボルと、voidの関数は区別できません。voidはシンボルvoidと同じではありません。defunで定義すればvoidも有効な関数足り得るからです。

fboundpを使用して任意のシンボルの関数定義がvoidかどうかテストすることができます。シンボルに関数定義を与えた後は、fmakunboundを使用して再びvoidにすることができます。

Function: fboundp symbol

この関数はそのシンボルが関数セルに非nilのオブジェクトをもっていればt、それ以外はnilをリターンする。これはそのオブジェクトが本物の関数であるかチェックしない。

Function: fmakunbound symbol

この関数はsymbolの関数セルをnilにする。そのためこれ以降に関数セルへのアクセスを試みると、void-functionエラーが発生する。これはsymbolをリターンします(変数がvoidのときmakunboundも参照)。

(defun foo (x) x)
(foo 1)
     ⇒1
(fmakunbound 'foo)
     ⇒ foo
(foo 1)
error→ Symbol's function definition is void: foo
Function: fset symbol definition

この関数はsymbolの関数セルにdefinitionを格納する。結果はdefinitiondefinitionは通常は関数か関数の名前であるべきだが、これはチェックされない。引数symbolは通常のどおり評価される引数である。

この関数は主に関数を定義したり変更して構築を行う、defunadvice-addのようなものからサブルーチンとして使用される。たとえばキーボードマクロ(キーボードマクロを参照)のような、関数ではない関数定義をシンボルに与えるためにも使用することができる:

;; 名前つきのキーボードマクロを定義する。
(fset 'kill-two-lines "\^u2\^k")
     ⇒ "\^u2\^k"

関数にたいして別の名前を作成するためにfsetを使いたいなら、かわりにdefaliasの使用を考慮すること。Definition of defaliasを参照。

結果として得られた関数定義のチェーンが循環している場合には、Emacsはcyclic-function-indirectionエラーをシグナルする。

This page has generated for branch:emacs-30, commit:ab5505a8acf795c0a0a2745dd6fb666954c6a4bb to check Japanese translation.