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)))
(method
>> Error: No matching 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
のエラーが生じます。
なし。