Function ENSURE-GENERIC-FUNCTION

UP


Function ENSURE-GENERIC-FUNCTION

Function ENSURE-GENERIC-FUNCTION

構文

ensure-generic-function function-name &key argument-precedence-order declare documentation environment generic-function-class lambda-list method-class method-combination
=> generic-function

引数と戻り値

function-name - 関数名

キーワード引数はdefgenericの引数に対応しますが、 :method-class:generic-function-classの引数は、 名前と同様にクラスオブジェクトを指定できます。

method-combination - method-combinationオブジェクト
environment - マクロ展開関数の&environment引数と同じです。 この引数は、コンパイル時と実行時を区別するために使われます。
generic-function - ジェネリック関数オブジェクト

定義

ensure-generic-function関数は、 メソッドを持たないグローバルの名前付きジェネリック関数を定義したり、 グローバルの名前付きジェネリック関数全体に関連する オプションや宣言を指定・変更するために使われます。

もしfunction-nameがグローバル環境においてfboundではない場合 新しいジェネリック関数が作成されます。 もし(fdefinition function-name)が通常の関数か、 マクロか、特殊オペレーターで存在する場合は、エラーが発せられます。

もしfunction-nameがリストの場合は、 (setf symbol)の形式でなければなりません。 もしfunction-nameというジェネリック関数が定義されており、 引数に続く値が違っている場合は、 ジェネリック関数は:argument-precedence-order, :declare, :documentation, :method-combination の値を新しいものに修正します。

もしfunction-nameで定義されているジェネリック関数と :lambda-list引数の値が異なっており、 新しい値が既存の全てのメソッドのラムダリストと合致するか、 あるいはメソッドがそもそも存在しない場合は新しい値に変更されます。 そうでない場合は、エラーが発せられます。

function-nameで定義されているジェネリック関数と :generic-function-class引数の値が異なっており、 かつ新しいジェネリック関数のクラスが古いものと互換性がある場合は、 change-classを呼び出して ジェネリック関数のクラスを変更します。 そうでない場合は、エラーが発生します。

function-nameで定義されているジェネリック関数と :method-class引数の値が異なっている場合は、 新しい値に変更されます。 しかし既に存在しているメソッドは変更されません。

例文

なし。

影響

function-nameに束縛されている既存の関数。

例外

もし(fdefinition function-name)が通常の関数か、 マクロか、特殊オペレーターで存在する場合は、 型errorのエラーが発せられます。

もしfunction-nameで定義されているジェネリック関数と :lambda-list引数の値が異なっており、 新しい値が既存の全てのメソッドのラムダリストと合致しない場合は、 型errorのエラーが発せられます。

function-nameで定義されているジェネリック関数と :generic-function-class引数の値が異なっており、 かつ新しいジェネリック関数のクラスが古いものと互換性がない場合は、 型errorのエラーが発せられます。

参考

defgeneric

備考

なし。


TOP, Github