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)
=> NILadd-method, defclass, defgeneric, defmethod
もしspecializers引数の長さが、 generic-functionの要求された引数の数と、 一致するしていなかったときは、 型errorのエラーが生じます。
そのようなメソッドが存在せず、errorpがtrueのときは、 find-methodは型errorのエラーが生じます。
なし。