% 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
のエラーが生じます。
なし。