Local Macro CALL-METHOD
, MAKE-METHOD
call-method
method &optional next-method-list => result*
make-method
form => method-object
method - メソッドオブジェクトか、リスト(下記参照)。評価はされません。
method-object - メソッドオブジェクト
next-method-list - メソッドオブジェクトのリスト。評価はされません。
results - メソッドの実行による返却値
マクロcall-method
は、method-combination内で使用されます。 メソッドがどのように呼ばれるかという詳細を 実装依存で隠蔽することができます。 マクロcall-method
はレキシカルスコープを持っており、 有効なメソッドフォーム内でのみ使用することができます。
グローバル環境下で、call-method
がfbound
かどうかは実装依存です。 しかし、再定義とcall-method
のシャドウについての制限は、 COMMON-LISP
パッケージにある、 グローバル環境下においてfbound
であるシンボルと同じです。 call-method
を有効なメソッド定義フォームの外で 使おうとしたときの結果は未定義です。
マクロcall-method
は、指定されたメソッド実行し、 その際に引数とcall-next-method
、next-method-p
の定義を与えます。 もしcall-method
の実行が文脈的にmake-method
の内側であったとき、 引数はメソッドに指定されたものになります。 そうでなければ、引数はジェネリック関数に指定されたものです。 call-next-method
、next-method-p
の定義は、 指定されたnext-method-listに依存します。
もしmethodがリストの場合、 リストの最初の要素はシンボルmake-method
、 2番目の要素はフォームでなければなりません。 このようなリストは、与えられたフォームが メソッド関数のボディ部であるようなメソッドオブジェクトを意味します。
next-method-listは、メソッドオブジェクトか、 あるいは最初の要素はシンボルmake-method
であり 2番目の要素がフォームであるようなリストを含むことができます。
make-method
が使えるのは、この2か所だけです。 make-method
を使用したフォームは、 null
のレキシカルな環境から 加えてローカルマクロcall-method
の定義と、 COMMON-LISP-USER
パッケージからアクセスできないシンボル名の束縛で 拡張された環境下で評価されます。
メソッドで使用できるcall-next-method
関数は、 next-method-listの最初のメソッドを呼び出します。 そのメソッドで使用できるcall-next-method
関数は、 次にnext-method-listの2番目のメソッドを呼び出し、 次のメソッドのリストを使い果たすまでこれを繰り返します。
next-method-listが与えられないときは、 メソッドで使用できるcall-next-method
関数は 型control-error
のエラーを通知し、 メソッドで使用できるnext-method-p
関数は nil
を返します。
なし。
なし。
なし。
call-next-method
, define-method-combination
, next-method-p
なし。