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


12.13 The declare Form

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

Macro: declare specs…

このマクロは引数を無視して、nilとして評価され、実行時の効果はありません。しかしdefunまたはdefsubst(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を参照してください。

(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はその関数呼び出しのかわりに使用するための新しい式、または変更されていないフォーム(その関数呼び出しを変更しないことを示す)のどちらかをreturnすることができます。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に渡されます。