% Local-Macro CALL-METHOD, MAKE-METHOD
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
なし。