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フォームなら、((lambda (arg)
body)のように)単一の引数をもつフォームとして記述すること。関数の正規引数はlambdaの引数リストに自動的に追加されるため。
(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に渡される。
extraM-xでの補完にたいして入力を求める際に、関数のシンボルを関数リストに含めるかどうかを決定する関数としてcompletion-predicateを宣言する。この述語関数はread-extended-command-predicateがcommand-completion-default-include-pにカスタマイズされているときだけ呼び出される。read-extended-command-predicateのデフォルトの値はnil
(execute-extended-commandを参照)。述語completion-predicateは関数のシンボル、カレントバッファーという2つの引数で呼び出される。
(modes modes)指定されたmodesにのみ適用されることを意図したコマンドであることを指定する。
(interactive-args arg ...)repeat-command用に格納されるべき引数を指定する。argはそれぞれargument-name
formという形式。
(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モードを参照)。