% 7.1.1. 初期化引数
7.1.1. 初期化引数
初期化引数は、オブジェクトの作成と初期化を制御します。
よくキーワードを初期化引数の名前にするのが便利で使われますが、
初期化引数の名前はnil
を含む
どんなシンボルでも使用できます。
初期化引数は、次の2つの方法である、
スロットの値を埋めるためか、
あるいは初期化メソッドの引数に提供するときに使用します。
単一の初期化引数は、両方の目的で使用されます。
初期化引数リストは、
初期化引数の名前と値のプロパティリストです。
この構造は、通常のプロパティリストとして同一であり、
引数リストの&key
パラメーターとして処理される部分としても同一です。
これらのリストは、もし初期化引数の名前が
初期化引数リストに複数現れた場合は、
もっとも左側に現れた値が指定され、残りのものは無視されます。
make-instance
の引数(最初の引数よりあとのもの)の形は、
初期化引数リストです。
初期化引数はスロットと結び付けることができます。
もし初期化引数が
初期化引数リストの中で値を持っている場合、
その値は新しく作成されたオブジェクトのスロットに格納されます。
もし:initform
フォームがスロットと結び付けられていた場合でも、
初期化引数の方が上書きをします。
1つの初期化引数は、複数のスロットを初期化することができます。
共有スロットを初期化する初期化引数は、
以前の値を置き換えて、共有スロットに値を格納します。
初期化引数はメソッドに結び付けることができます。
オブジェクトが作成されて、特定の初期化引数が与えられた場合、
ジェネリック関数であるinitialize-instance
,
shared-initialize
, そしてallocate-instance
は、
キーワード引数のペアとして、初期化引数の名前と値とともに呼び出されます。
もし初期化引数の値が
初期化引数リストで提供されていなかった場合は、
メソッドのラムダリストがデフォルト値を提供します。
初期化引数は次の4つの状況によって使用されます。 インスタンスの作成時、インスタンスの再初期化時、 クラス再定義によるインスタンスの更新時、 そして違うクラス定義へのインスタンスを更新するときです。
初期化引数は特定のクラスのインスタンスの 作成と初期化時に制御で使用されるため、 初期化引数は、 クラスの「初期化引数は~」のように記述します。