Next: コンパイラーへの定義済み関数の指示, Previous: インライン関数Inli, Up: 関数 [Contents][Index]
declare
フォームdeclare
(宣言)は特別なマクロで、関数やマクロにメタプロパティーを追加するために使用できます。たとえば陳腐化しているとマークしたり、Emacs
Lispモード内の特別なTABインデント規約を与えることができます。
このマクロは引数を無視してnil
として評価されるので、実行時の効果はない。しかしdefun
やdefsubst
(関数の定義を参照)、またはdefmacro
マクロ(マクロの定義を参照)の定義のdeclare引数にdeclare
フォームがある場合は、specsで指定されたプロパティーを関数またはマクロに追加します。これはdefun
、defsubst
、defmacro
により特別に処理される。
specs内の各要素は(property
args…)
というフォームをもつこと。またそれあをクォートしないこと。これらは以下の効果をもつ:
(advertised-calling-convention signature when)
これはset-advertised-calling-convention
(関数の陳腐化の宣言を参照)の呼び出しと同じように振る舞う。signatureにはその関数(またはマクロ)にたいする正しい引数リスト、whenには古い引数リストが最初に陳腐化する時期を示す文字列を指定する。
(debug edebug-form-spec)
これはマクロだけに有効である。Edebugでそのマクロ入ったときに、edebug-form-specを使用する。マクロ呼び出しのインストルメントを参照のこと。
(doc-string n)
自身が関数やマクロ、変数のようなエンティティーを定義するために使用されるような関数やマクロを定義するときにこれが使用される。これはn番目の引数というこを示し、もしそれがあれば、それはドキュメント文字列とみなされる。
(indent indent-spec)
この関数(かマクロ)にたいするインデント呼び出しは、indent-specにしたがう。これは関数でも機能するが、通常はマクロで使用される。マクロのインデントを参照のこと。
(interactive-only value)
その関数のinteractive-only
プロパティにvalueをセットする。The interactive-only propertyを参照のこと。
(obsolete current-name when)
make-obsolete
(関数の陳腐化の宣言を参照)と同様に、関数(かマクロ)が陳腐化しているとマークする。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)
expanderがgv-define-expander
と同様、ジェネリック変数としてマクロ(か関数)にたいする呼び出しを処理する関数であることを宣言する。expanderはシンボルかフォーム(lambda
(arg) body)
を指定できる。フォームなら、その関数は追加でそのマクロ(か関数)の引数にアクセスできる。
(gv-setter setter)
setterがジェネリック変数としてマクロ(か関数)にたいする呼び出しを処理する関数であることを宣言する。setterはシンボルかフォームを指定できる。シンボルなら、そのシンボルはgv-define-simple-setter
に渡される。フォームなら(lambda
(arg)
body)
という形式で、その関数は追加でマクロ(か関数)の引数にアクセスでき、それはgv-define-setter
に渡される。
extra
M-xでの補完にたいして入力を求める際に、シンボルを関数リストに含めるかどうかを決定する関数としてcompletion-predicateを宣言する。completion-predicateは2つのパラメーターで呼び出される。1つ目のパラメーターはシンボル、2つ目のパラメーターはカレントバッファー。
(modes modes)
それがmodesだけを意図したコマンドである異ことを指定する。
(pure val)
valが非nil
なら、その関数は純粋(pure)である(関数とは?を参照)。これは関数のシンボルのpure
プロパティと同じ(シンボルの標準的なプロパティを参照)。
(side-effect-free val)
valが非nil
ならこの関数には副作用がないので、関数の値を無視するような呼び出しをバイトコンパイラーは無視できる。これは関数のシンボルのside-effect-free
プロパティと同じ。シンボルの標準的なプロパティを参照のこと。
(speed n)
この関数のネイティブコンパイルにたいして有効なnative-comp-speed
の値を指定する(ネイティブコンパイル関数を参照)。これによりその関数に発行されるネイティブコードに用いる最適化レベルを関数レベルで制御できるようになる。特にnが-1の場合には、その関数のネイティブコンパイルによってその関数にたいするネイティブコードではなくバイトコードが発行される。
no-font-lock-keyword
これはマクロにたいしてのみ有効。この宣言をもつマクロは特にマクロとしてではなく、通常の関数としてfont-lockによりハイライトされる(Font Lockモードを参照)。