% 7.1.6. Initialize-Instance
7.1.6. Initialize-Instance
ジェネリック関数initialize-instanceは、
新しく作成されたインスタンスを初期化するために、
make-instanceによって呼び出されます。
method-combinationはstandardが使われます。
initialize-instanceのメソッドは、
単純に初期値をスロットに指定できないような初期化を実行するために定義できます。
初期化中では、次に示したアクションを実行したあとに
initialize-instanceが呼び出されます。
デフォルト初期化引数リストは、 提供された初期化引数リストと 各クラスのデフォルト初期化引数を結びつける計算がされます。
デフォルト初期化引数リストの有効性はチェックされます。 もしどの初期化引数の有効として宣言されていなかった場合は、 エラーが発せられます。
新しいインスタンスはスロットがunboundとして作成されます。
ジェネリック関数initialize-instanceは
新しいインスタンスとデフォルト初期化引数とともに呼び出されます。
システムが提供するinitialize-instanceのメソッドでは、
特定パラメーターはstandard-objectクラスのものが存在します。
このメソッドは、ジェネリック関数shared-initializeを呼び出し、
初期化引数に対応したものか、
あるいは:initformフォームに対応した値を設定します。
ジェネリック関数shared-initializeの引数は、
インスタンス、t、
デフォルト初期化引数を指定して呼び出されます。
注意として、initialize-instanceはデフォルト初期化引数リストを
shared-initializeの呼び出し時に提供します。
そして最初のステップとして、
システムが提供するshared-initializeのメソッドは、
make-instance呼び出し時に提供された初期化引数と、
デフォルト初期化引数リストの両方を集計して呼び出されます。
initialize-instanceのメソッドは、
インスタンスの初期化時に、特定のアクションを定義することができます。
もしinitialize-instanceのafterメソッドだけが定義された場合、
これらはシステムが提供した初期化後に実行されます。
したがってこれらは、initialize-instanceの標準的な動作には干渉しないでしょう。
オブジェクトシステムは、initialize-instanceメソッドの構築に
便利な2つの関数を提供しています。
関数slot-boundpは、スロットが値を持っているかどうかを示すブール値を返却します。
これはinitialize-instanceのafterメソッドを記述する際に、
まだ初期化されていないスロットのみを初期化するような仕組みを提供します。
関数slot-makunboundは、スロットの値を削除します。