次: Enabling Advice, 前: Computed Advice, 上: Advising Functions
デフォルトでは、アドバイスを定義してもその効果は発揮されません。
アドバイスした関数のアドバイスを活性にして始めて効果を発揮します。
defadvice
でフラグactivate
を指定すれば、
関数にアドバイスを定義したときに活性にできます。
しかし、普通は、関数ad-activate
や以下の活性化コマンドを
呼び出すことで、関数のアドバイスを活性にします。
アドバイスの定義操作と活性化操作を区別することで、 アドバイスを追加するたびに関数を再定義することなる、 関数に複数のアドバイス断片を効率よく追加できます。 さらに重要なことは、関数を実際に定義するまえでも 関数にアドバイスを定義できることです。
関数のアドバイスを初めて活性にすると、 関数の元定義を保存してから、関数に対する有効なアドバイス断片すべてを 元定義と結合して新たな定義を作り出します。 (現在無効にしてあるアドバイス断片は使用しない。 see Enabling Advice。) この定義をインストールし、 以下に述べる条件に応じてバイトコンパイルする場合もあります。
アドバイスを活性にするコマンドすべてにおいて、
compileがt
であると、
アドバイスを実装する結合定義をコンパイルします。
関数のアドバイスがすでに活性になっているアドバイスを 活性にしても意味があります。 当該関数のアドバイスを活性にしたあとでアドバイスを変更した場合、 その変更が効果を持つようにする操作になります。
このコマンドはregexpに一致する名前のすべてのアドバイス断片を活性にする。 より正確には、regexpに一致する名前のアドバイス断片を持つ任意の 関数のすべてのアドバイスを活性にする。
このコマンドはregexpに一致する名前の すべてのアドバイス断片を不活性にする。 より正確には、regexpに一致する名前のアドバイス断片を持つ任意の 関数のすべてのアドバイスを不活性にする。
このコマンドはregexpに一致する名前のアドバイス断片を活性にするが、 すでにアドバイスが活性になっている関数に対するものだけである。 関数に対するアドバイスの再活性化は、 アドバイスを活性にしたあとに行った当該アドバイスの変更すべて (有効にしたり無効にしたアドバイス断片を含む。 see Enabling Advice)が効果を持つようにするのに便利である。
『予約活性』(see Preactivation)中にアドバイス定義を作成すると
その定義はすでにコンパイルされているはずです。
というのは、preactivate
フラグを指定したdefadvice
を
含むファイルをバイトコンパイル中にそれが定義されたはずだからです。