このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
保存と読み込みのプロセスの変更
保存と読み込みのプロセスを変更する場合
保存と読み込みのプロセスを変更する主な理由は、クラスの下位互換性と上位互換性のサポートです。以下の場合に、保存と読み込みのプロセス変更を考慮します。
クラスの名前の変更
プロパティの削除
初期化の順序が重要な場合にハンドル オブジェクトの循環参照を定義する
コンストラクターを引数と共に呼び出さなければならないため
ConstructOnLoad
が使用できない
保存と読み込みのプロセスの変更方法
保存および読み込みのプロセスを変更する最も汎用性の高い手法は、クラスの loadobj
メソッドを実装することです。必要に応じて saveobj
メソッドも実装します。MATLAB® は、クラスのオブジェクトで save
または load
が呼び出される際にこれらのメソッドを実行します。
関数 save
は、保存操作を実行する前にユーザー クラスの saveobj
メソッドを呼び出します。すると、関数 save
は、saveobj
メソッドが返す値を保存します。saveobj
を使用して、変更されたオブジェクトを、またはプロパティ値を含む struct
を返すことができます。
load
は、オブジェクトの読み込み後にユーザー クラスの loadobj
メソッドを呼び出します。関数 load
は、loadobj
メソッドが返す値をワークスペースに読み込みます。loadobj
メソッドは読み込まれるオブジェクトを変更したり、クラスの saveobj
メソッドによって保存されたデータからオブジェクトを再構成できます。
saveobj
メソッドと loadobj
メソッドの実装
保存されるオブジェクトを変更する saveobj
メソッドを実装し、続いて loadobj
メソッドを実装して、オブジェクトを読み込むときにそのオブジェクトを適切な状態に戻します。
MATLAB ではクラスのオブジェクトの代わりに struct
を使用して loadobj
メソッドを呼び出すことができるので、loadobj
メソッドを Static
メソッドとして実装します。
saveobj
メソッドは通常のメソッドとして実装します (つまり、このメソッドの呼び出しにはクラスのインスタンスが必要です)。
saveobj
メソッドが構造体内のオブジェクト データのみを保存する場合に備え、load
がどの loadobj
メソッドを呼び出すか判断できるように、MATLAB はオブジェクトのクラス名を保存します。したがって、オブジェクトの読み込みに際してクラスは MATLAB からアクセスできなければなりません。
次のような場合に loadobj
メソッドを使用します。
オブジェクトが保存されてからクラス定義が変更され、読み込む前にこのオブジェクトを変更する必要がある場合。
saveobj
メソッドが保存操作時にオブジェクトを変更し、struct
にデータを保存した可能性がある場合。loadobj
メソッドを実装して、saveobj
の出力からオブジェクトを再構成します。
その他の考慮事項
既定の save と load のプロセスを変更するときには、以下の点を忘れないでください。
MAT ファイルから任意のプロパティ値を読み込む際にエラーが発生する場合、
load
はstruct
をloadobj
に渡します。struct
のフィールド名は、ファイルから抽出されたプロパティ名に対応します。loadobj
は、saveobj
がない場合やsaveobj
がstruct
を返さない場合でも、常に入力としてstruct
を受け入れ、オブジェクトを返さなければなりません。saveobj
がstruct
を返す場合、load
は常にそのstruct
をloadobj
に渡します。サブクラスのオブジェクトは、スーパークラスの
loadobj
メソッドとsaveobj
メソッドを継承します。したがって、loadobj
メソッドまたはsaveobj
メソッドをサブクラスで定義しないと、MATLAB は継承されたメソッドのみを呼び出します。スーパークラスで
loadobj
メソッドまたはsaveobj
メソッドを実装する場合は、スーパークラスのメソッドを呼び出すloadobj
メソッドまたはsaveobj
メソッドをサブクラスに実装できます。詳細は、クラス階層からのオブジェクトの保存と読み込みを参照してください。関数
load
は、既定ではコンストラクターを呼び出しません。詳細は、読み込み時のオブジェクトの初期化を参照してください。enum クラスでは、
loadobj
およびsaveobj
のカスタマイズはサポートされていません。