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
は、スロットの値を削除します。