Previous: 古いdefadviceを使用するコードの改良, Up: Emacs Lisp関数にたいするアドバイス [Contents][Index]
すべての関数にたいして信頼性をもってアドバイスできる訳ではありません。バイトコンパイラーが関数の呼び出しを、あなたが変更したい関数を呼び出さない命令シーケンスに置き換えることを選択するかもしれないからです。
これは通常は以下の3つのメカニズムのいずれかのために発生します:
byte-compile
プロパティある関数のシンボルにbyte-compile
プロパティがあると、シンボルの関数定義のかわりにそのプロパティが使用される。バイトコンパイル関数を参照のこと。
byte-optimize
プロパティある関数のシンボルにbyte-optimize
プロパティがあると、バイトコンパイラーが関数の引数を書き換えたり、まったく別の関数の使用を決断するかもしれない。
compiler-macro
関数は定義内に特別なdeclare
フォームであるcompiler-macro
をもつことができる(declare
フォームを参照)。これは関数のコンパイル時に呼び出すexpanderを定義する。その場合にはexpanderが元の関数を呼び出さないバイトコードを生成するかもしれない。