Next: , Previous: , Up: Functions   [Contents][Index]


13.14 declareフォーム

declare(宣言)は特別なマクロで、関数やマクロにメタプロパティーを追加するために使用できます。たとえば陳腐化しているとマークしたり、Emacs Lispモード内の特別なTABインデント規約を与えることができます。

Macro: declare specs…

このマクロは引数を無視してnilとして評価されるので、実行時の効果はない。しかしdefundefsubst(Defining Functionsを参照)、またはdefmacroマクロ(Defining Macrosを参照)の定義のdeclare引数にdeclareフォームがある場合は、specsで指定されたプロパティーを関数またはマクロに追加します。これはdefundefsubstdefmacroにより特別に処理される。

specs内の各要素は(property args…)というフォームをもつこと。またそれあをクォートしないこと。これらは以下の効果をもつ:

(advertised-calling-convention signature when)

これはset-advertised-calling-convention(Obsolete Functionsを参照)の呼び出しと同じように振る舞う。signatureにはその関数(またはマクロ)にたいする正しい引数リスト、whenには古い引数リストが最初に陳腐化する時期を示す文字列を指定する。

(debug edebug-form-spec)

これはマクロだけに有効である。Edebugでそのマクロ入ったときに、edebug-form-specを使用する。Instrumenting Macro Callsを参照のこと。

(doc-string n)

自身が関数やマクロ、変数のようなエンティティーを定義するために使用されるような関数やマクロを定義するときにこれが使用される。これはn番目の引数というこを示し、もしそれがあれば、それはドキュメント文字列とみなされる。

(indent indent-spec)

この関数(かマクロ)にたいするインデント呼び出しは、indent-specにしたがう。これは関数でも機能するが、通常はマクロで使用される。Indenting Macrosを参照のこと。

(interactive-only value)

その関数のinteractive-onlyプロパティにvalueをセットする。The interactive-only propertyを参照のこと。

(obsolete current-name when)

make-obsolete(Obsolete Functionsを参照)と同様に、関数(かマクロ)が陳腐化しているとマークする。current-nameにはシンボル(かわりにこのシンボルを使うことを促す警告メッセージになる)、文字列(警告メッセージを指定)、またはnil(警告メッセージには追加の詳細が含まれない)を指定すること。whenにはその関数(かマクロ)が最初に陳腐化する時期を示す文字列を指定すること。

(compiler-macro expander)

これは関数だけに使用でき、最適化関数(optimization function)としてexpanderを使用するようコンパイラーに告げる。(function args…)のようなその関数への呼び出しフォームに出会うと、マクロ展開機能(macro expander)はargs…と同様のフォームでexpanderを呼び出す。expanderはその関数呼び出しのかわりに使用するための新しい式、または変更されていないフォーム(その関数呼び出しを変更しないことを示す)のどちらかをリターンすることができる。expanderにはシンボルかフォーム(lambda (arg) body)を指定できる。フォームならargは元の関数呼び出し式を保持して、その関数の形式に適う引数を使用することにより、その関数にたいする(評価されていない)引数にアクセスができる。

(gv-expander expander)

expandergv-define-expanderと同様、ジェネリック変数としてマクロ(か関数)にたいする呼び出しを処理する関数であることを宣言する。expanderはシンボルかフォーム(lambda (arg) body)を指定できる。フォームなら、その関数は追加でそのマクロ(か関数)の引数にアクセスできる。

(gv-setter setter)

setterがジェネリック変数としてマクロ(か関数)にたいする呼び出しを処理する関数であることを宣言する。setterはシンボルかフォームを指定できる。シンボルなら、そのシンボルはgv-define-simple-setterに渡される。フォームなら(lambda (arg) body)という形式で、その関数は追加でマクロ(か関数)の引数にアクセスでき、それはgv-define-setterに渡される。