7.6.4. ジェネリック関数の全てのメソッドのラムダリストの合意
下記に示すこれらの定義は、ラムダリストの集合の合意を定義します。 ラムダリストには、指定したジェネリック関数の各メソッドのラムダリストと、 ジェネリック関数自身で定義されたラムダリストを含みます。
各ラムダリストは、同じ数の要求パラメーターを持つ必要があります。
各ラムダリストは、同じ数の&optional
パラメーターを持つ必要があります。 各メソッドは、&optional
パラメーターに独自のデフォルト値を提供することができます。
もしどれかのラムダリストが&rest
か&key
を持つなら、 各ラムダリストはそのうちの1つか両方を指定する必要があります。
もしジェネリック関数のラムダリストが&key
を持つなら、 各メソッドは&key
の後の全てのキーワードの名前を受け付けるようにする必要があります。 受け付ける方法は、全ての名前を明に指定する方法、 あるいは&allow-other-keys
を指定する方法がありますが、 &key
の指定ではなく&rest
を指定する方法でも問題ありません。 各メソッドは、独自のキーワード引数を追加で受け付けることができます。 キーワードの名前の有効性のチェックはジェネリック関数が行い、各メソッドでは行いません。 メソッドが実行されたときには、キーワード引数に名前が:allow-other-keys
、 値がtrue
であるペアが与えられたように呼び出されますが、 そのような引数のペアは渡されません。
&allow-other-keys
の使用は、ラムダリスト間で一貫している必要はありません。 もし&allow-other-keys
がジェネリック関数か適用メソッドのラムダリストに指定されている場合、 ジェネリック関数が呼び出されるときには、どんなキーワード引数も受け付けるでしょう。
&aux
の使用は、メソッド間で一貫している必要はありません。
もしジェネリック関数のオプションを指定できないメソッド宣言オペレーターが ジェネリック関数を作成した場合、 さらにメソッドのラムダリストにキーワードパラメーターが指定されている場合は、 ジェネリック関数のラムダリストには&key
が指定されます(しかしキーワード引数は指定されない)。