次: , 前: Computed Advice, 上: Advising Functions


16.5 アドバイスの活性化

デフォルトでは、アドバイスを定義してもその効果は発揮されません。 アドバイスした関数のアドバイスを活性にして始めて効果を発揮します。 defadviceでフラグactivateを指定すれば、 関数にアドバイスを定義したときに活性にできます。 しかし、普通は、関数ad-activateや以下の活性化コマンドを 呼び出すことで、関数のアドバイスを活性にします。

アドバイスの定義操作と活性化操作を区別することで、 アドバイスを追加するたびに関数を再定義することなる、 関数に複数のアドバイス断片を効率よく追加できます。 さらに重要なことは、関数を実際に定義するまえでも 関数にアドバイスを定義できることです。

関数のアドバイスを初めて活性にすると、 関数の元定義を保存してから、関数に対する有効なアドバイス断片すべてを 元定義と結合して新たな定義を作り出します。 (現在無効にしてあるアドバイス断片は使用しない。 see Enabling Advice。) この定義をインストールし、 以下に述べる条件に応じてバイトコンパイルする場合もあります。

アドバイスを活性にするコマンドすべてにおいて、 compiletであると、 アドバイスを実装する結合定義をコンパイルします。

— コマンド: ad-activate function &optional compile

このコマンドはfunctionに対するアドバイスを活性にする。

関数のアドバイスがすでに活性になっているアドバイスを 活性にしても意味があります。 当該関数のアドバイスを活性にしたあとでアドバイスを変更した場合、 その変更が効果を持つようにする操作になります。

— コマンド: ad-deactivate function

このコマンドはfunctionのアドバイスを不活性にする。

— コマンド: ad-activate-all &optional compile

このコマンドはすべての関数に対するアドバイスを活性にする。

— コマンド: ad-deactivate-all

このコマンドはすべての関数に対するアドバイスを不活性にする。

— コマンド: ad-activate-regexp regexp &optional compile

このコマンドはregexpに一致する名前のすべてのアドバイス断片を活性にする。 より正確には、regexpに一致する名前のアドバイス断片を持つ任意の 関数のすべてのアドバイスを活性にする。

— コマンド: ad-deactivate-regexp regexp

このコマンドはregexpに一致する名前の すべてのアドバイス断片を不活性にする。 より正確には、regexpに一致する名前のアドバイス断片を持つ任意の 関数のすべてのアドバイスを不活性にする。

— コマンド: ad-update-regexp regexp &optional compile

このコマンドはregexpに一致する名前のアドバイス断片を活性にするが、 すでにアドバイスが活性になっている関数に対するものだけである。 関数に対するアドバイスの再活性化は、 アドバイスを活性にしたあとに行った当該アドバイスの変更すべて (有効にしたり無効にしたアドバイス断片を含む。 see Enabling Advice)が効果を持つようにするのに便利である。

— コマンド: ad-start-advice

関数を定義したり再定義したときにアドバイスを自動的に活性にする。 このモードをオンにすると、アドバイスを定義するとただちに効果を持つようになる。

— コマンド: ad-stop-advice

関数を定義したり再定義してもアドバイスを自動的には活性にしない。

— ユーザオプション: ad-default-compilation-action

この変数は、関数に対するアドバイスを活性にした結果作られる 結合定義をコンパイルするかどうか制御する。

『予約活性』(see Preactivation)中にアドバイス定義を作成すると その定義はすでにコンパイルされているはずです。 というのは、preactivateフラグを指定したdefadviceを 含むファイルをバイトコンパイル中にそれが定義されたはずだからです。