7.6.6.4. 組み込みのMethod-Combination

UP


7.6.6.4. 組み込みのMethod-Combination

オブジェクトシステムは、組み込みのmethod-combinationタイプをいくつか提供しています。 これらのmethod-combinationタイプのうちの1つを、ジェネリック関数で使うことができます。 指定する方法は、method-combinationタイプの名前を、 defgeneric:method-combinationオプションに引数として与えるか、 その他のオペレーターでジェネリック関数の オプション:method-combinationを指定することです。

組み込みのmethod-combinationタイプの名前を、次の表に示します。

+
and
append
list
max
min
nconc
or
progn
standard

表7-2 組み込みのMethod-Combinationタイプ

組み込みのmethod-combinationタイプであるstandardの意味は、 7.6.6.2. Standard Method-Combinationに記載しました。 他の組み込みmethod-combinationタイプは、 シンプルな組み込みmethod-combinationタイプと呼ばれています。

シンプルなmethod-combinationタイプは、 短い形式のdefine-method-combinationによって定義されたかのように動作します。 メソッドは次の2つの役割を認識します。

シンプルな組み込みmethod-combinationタイプの意味を下記に示します。

(generic-function a1...an)

ここでM1, ... Mkはこの順に適用可能なプライマリリストであるとします。 そのとき、Lispフォームは次のように導出されます。

(operator <M1 a1...an> ... <Mk a1...an>)

もし式<Mi a1...an>が評価されたとき、メソッドMiは引数a1...anを適用します。 例えばoperatororのとき、式<Mi a1...an>は、 ただ<Mj a1...an>, 1≦j<inilを返却したときのみに評価されます。

プライマリメソッドのデフォルトの順番は:most-specific-firstです。 しかし、:method-combinationオプションの2番目の引数に :most-specific-lastを指定したときは逆順にすることができます。

シンプルな組み込みmethod-combinationタイプは、 メソッドに対して正確に1つの修飾子を要求します。 もし修飾子が存在しない適用可能なメソッドか、 あるいはmethod-combinationタイプが認識しない修飾子を指定したときはエラーが発せられます。 もしaroundメソッドが存在するものの、プライマリメソッドが存在しない場合は、エラーが発せられます。


TOP, Github