Standard-Generic-Function FIND-METHOD

UP


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の引数qualifiersspecializersで 一致するメソッドオブジェクトを返却します。 method-qualifiersは、 methodのメソッド修飾子が含まれます。 メソッド修飾子の順序は重要です。 この文脈の合致についての定義は、7.6.3. 特定パラメーターと修飾子の合致をご確認ください。

specializers引数は、メソッドの特定パラメーターを含みます。 この引数は、ジェネリック関数の要求された引数の数と、 一致する長さでなければならず、 そうでない場合はエラーが発生します。 つまり、引数のgeneric-functionのデフォルトメソッドを得るためには、 クラスtを要素とするリストを与える必要があります。

そのようなメソッドが存在せず、errorptrueのときは、 find-methodはエラーを発生します。 そのようなメソッドが存在せず、errorpfalseのときは、 find-methodnilを返却します。

例文

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

そのようなメソッドが存在せず、errorptrueのときは、 find-methodは型errorのエラーが生じます。

参考

7.6.3. 特定パラメーターと修飾子の合致

備考

なし。


TOP, Github