Standard-Generic-Function SHARED-INITIALIZE

UP


Standard-Generic-Function SHARED-INITIALIZE

Standard Generic Function SHARED-INITIALIZE

構文

shared-initialize instance slot-names &rest initargs &key &allow-other-keys => instance

メソッド宣言

shared-initialize (instance standard-object) slot-names &rest initargs

引数と戻り値

instance - オブジェクト
slot-names - リストかt
initargs - keyword/valueのペアのリスト(初期化引数の名前と値)

定義

ジェネリック関数shared-initializeはインスタンスのスロットに、 引数initargs:initformを用いて値を埋めるときに使われます。 この関数の呼び出しは、インスタンスが作成されるとき、 インスタンスが再初期化されるとき、 クラスの再定義によりインスタンスが更新されるとき、 違うクラスにインスタンスを従わせるときに行われます。 ジェネリック関数shared-initializeは、 システムにより共有されるメソッドである、 initialize-instance, reinitialize-instance, update-instance-for-redefined-class, そしてupdate-instance-for-different-classによって呼び出されます。

ジェネリック関数shared-initializeは、次のような引数を取ります。 初期化されるインスタンス、 インスタンスがアクセス可能なスロットの名前の集合、 そしてinitargsの集合です。 最初2つの引数のあとの引数は、 初期化引数リストの形を取らなければなりません。 システムが提供しているshared-initializeのメソッドは、 スロットの値をinitargsで指定された:initformのフォームによって初期化します。 slot-namesは、もしスロットに対してinitargsが指定されていなかった場合、 :initformによって初期化するべきスロットを指定します。

スロットがローカルか共有かにかかわらず、システムが共有するメソッドは、 下記のような振る舞いをします。

もし初期化引数が指定されなかった場合、 slot-names引数によって指定されたスロットは :initformフォームに従って初期化されます。 slot-namesはスロットの名前のリストにすることができます。 この場合は、スロットの名前の集合を指定することになります。 あるいは、slot-namesにシンボルであるtを指定することもできます。 この場合は、スロットのすべての集合を指定したことになります。

例文

なし。

影響

なし。

例外

なし。

参考

initialize-instance, reinitialize-instance, update-instance-for-redefined-class, update-instance-for-different-class, slot-boundp, slot-makunbound, 7.1. オブジェクトの作成と初期化, 7.1.4. 初期化引数の規則, 7.1.2. 初期化引数の有効性の宣言

備考

initargは、defclass:initargオプションを使用するか、 あるいはshared-initializeのメソッドを定義することで、 有効な宣言であるとされます。 shared-initializeで定義されたメソッドのラムダリスト内の 各キーワードパラメータ指定子のキーワード名は、 そのメソッドが適用される全てのクラスで有効なinitargの名前として宣言されます。

処理系は、:initformのフォームを、 副作用を生成せず依存もせず、 またinitialize-instanceのプライマリメソッドで処理するのではなく、 initialize-instanceメソッドを実行する前に、 これらのフォームを評価してスロットに値を格納することが、 最適化では許可されています。 (この最適化は、allocate-instanceメソッドに プロトタイプのインスタンスをコピーさせることで実現できるかもしれません。)

処理系は、初期化引数リストが渡されるメソッドが 全てstandard-object上のメソッドのみである場合において、 実際には完全な初期化引数リストを作成せず、 initargsとスロットを関連付けるよう、 デフォルト初期値フォームを最適化することが許可されています。 この場合、デフォルトの初期値フォームは、 :initformフォームのように扱うことができます。 この最適化には、パフォーマンスの向上以外に目に見える効果はありません。


TOP, Github