7.2.2. 新しく追加された局所スロットの初期化
更新の二番目の手順では、新しく追加されたスロットを初期化し、 ユーザー定義のアクションを実行します。 このステップは、 ジェネリック関数update-instance-for-different-class
によって定義されます。 ジェネリック関数update-instance-for-different-class
は、 最初の更新手順が完了したあとに、change-class
によって実行されます。
ジェネリック関数update-instance-for-different-class
は、 change-class
によって計算された引数により実行されます。 最初の引数は、更新されるインスタンスのコピーであり、 クラスCfrom
のインスタンスです。 このコピーは、ジェネリック関数change-class
に動的エクステントとして保有されます。 二番目の引数は、change-class
によって更新されるインスタンスであり、 クラスCto
のインスタンスです。残りの引数は、初期化引数リストです。
システムが提供するupdate-instance-for-different-class
メソッドは、 2つの特定パラメーターがあり、 どちらもstandard-object
クラスです。 最初、このメソッドは、初期化引数の有効性をチェックし、 もし指定された初期化引数が有効であると宣言されていなかった場合は、 エラーが発せられます(詳細は7.1.2 初期化引数の有効性の宣言を参照)。 それから、このメソッドはジェネリック関数shared-initialize
を、 次に示す引数とともに呼び出します。 引数は、新しいインスタンス、新しく追加されるスロット名のリスト、 そして受け取った初期化引数です。