% Standard-Generic-Function FIND-METHOD
Standard Generic Function FIND-METHOD
find-method generic-function method-qualifiers specializers
&optional errorp
=> method
find-method (generic-function standard-generic-function)
method-qualifiers specializers &optional errorp
generic-function - ジェネリック関数
method-qualifiers - リスト
specializers - リスト
errorp - generalized-boolean、デフォルトはtrue
method - メソッドオブジェクトか、nil
ジェネリック関数find-methodは、
引数にジェネリック関数を受け取り、
修飾子と特定パラメーターがそれぞれ
find-methodの引数qualifiersとspecializersで
一致するメソッドオブジェクトを返却します。
method-qualifiersは、
methodのメソッド修飾子が含まれます。
メソッド修飾子の順序は重要です。
この文脈の合致についての定義は、7.6.3. 特定パラメーターと修飾子の合致をご確認ください。
specializers引数は、メソッドの特定パラメーターを含みます。
この引数は、ジェネリック関数の要求された引数の数と、
一致する長さでなければならず、
そうでない場合はエラーが発生します。
つまり、引数のgeneric-functionのデフォルトメソッドを得るためには、
クラスtを要素とするリストを与える必要があります。
そのようなメソッドが存在せず、errorpがtrueのときは、
find-methodはエラーを発生します。
そのようなメソッドが存在せず、errorpがfalseのときは、
find-methodはnilを返却します。
(defmethod some-operation ((a integer) (b float)) (list a b))
=> #<STANDARD-METHOD SOME-OPERATION (INTEGER FLOAT) 26723357>
(find-method #'some-operation '() (mapcar #'find-class '(integer float)))
=> #<STANDARD-METHOD SOME-OPERATION (INTEGER FLOAT) 26723357>
(find-method #'some-operation '() (mapcar #'find-class '(integer integer)))
>> Error: No matching method
(find-method #'some-operation '() (mapcar #'find-class '(integer integer)) nil)
=> NIL
add-method,
defclass,
defgeneric,
defmethod
もしspecializers引数の長さが、
generic-functionの要求された引数の数と、
一致するしていなかったときは、
型errorのエラーが生じます。
そのようなメソッドが存在せず、errorpがtrueのときは、
find-methodは型errorのエラーが生じます。
なし。