7.6.6.1.2. 優先順位による適用可能なメソッドのソート
2つのメソッドの優先順位を比べるために、特定パラメーターが順番に調べられます。 デフォルトの調査順は左から右ですが、defgeneric
か、あるいは別のオペレーターによる ジェネリック関数の:argument-precedence-order
オプションによって、逆順に指定されます。
各メソッドの対応する特定パラメーターが比較されます。 特定パラメーターのペアが一致していたら、次のペアが比較されます。 もし対応する全ての特定パラメーターが一致していたのであれば、 2つのメソッドは違った修飾子を持っている必要があります。 このケースの場合、メソッドはどちらの順番でも選択できます。 一致についての詳細は、7.6.3. 特定パラメーターと修飾子の合致を参照。
もしいくつかの特定パラメーターが一致していなかった場合、 最初に一致しなかった特定パラメーターのペアが優先順位を決定します。 もしどちらの特定パラメーターもクラスであったとき、 その2つのメソッドの対応する特定パラメーターを見て、 クラス優先リストの中に早く現われた方がより特定的なメソッドとなります。 適用可能なメソッドの集合から選択する方法を行っているため、 特定パラメーターは引数のクラスのクラス優先リストに存在することが保証されます。
もし対応する特定パラメーターのペアのうち、ちょうど1つが(eql object)
であったときは、 その特定パラメーターを持つメソッドが、他のメソッドより優先します。 もし両方の特定パラメーターがeql
形式であったときは、 特定は一致するとしなければなりません (そうでなければ2つのメソッドはこの引数において両方とも適用できなかったでしょう)。
適用可能なメソッドリストの結果は、最も特定的なメソッドが最初であり、 最も特定的ではないメソッドが最後になります。