Main Content

列挙型の保存と読み込み

基礎知識

オブジェクトの保存と読み込みの詳細は、関数 saveload および オブジェクトの保存と読み込みのプロセス を参照してください。

クラスによって定義された列挙型の名前のリストを表示するには、関数 enumeration を使用します。

組み込み列挙型と値ベース列挙型のクラス

組み込みクラスから派生している列挙型かプロパティをもつ値ベースのクラスである列挙型を保存すると、MATLAB® では列挙メンバーの名前と各メンバーの定義が保存されます。

これらの列挙型を読み込むと、MATLAB では基本値に名前が保持されます。保存された名前付きの値が現在のクラス定義と異なると、MATLAB では現在のクラス内で定義されている値が使用され、それから、警告が発行されます。

単純な列挙クラスとハンドルベースの列挙クラス

メンバー名に関連付けられたプロパティ、スーパークラス、または値をもたない単純な列挙値または handle クラスから派生した列挙値を保存すると、MATLAB では名前とすべての基本値が保存されます。

これらのタイプの列挙型を読み込むときには、MATLAB では、現在のクラスの定義内の名前に関連付けられた値が確認されません。この動作は、単純な列挙型が基本値をもたず、ハンドルベースの列挙型が原則的にクラスによって定義された値とは異なる値をもつ可能性があるという事実に起因しています。

原因: オブジェクトではなく struct としての読み込み

列挙型を保存した後に新しい名前付きの値または新しいプロパティをクラスに追加しても、MATLAB は読み込み中に警告しません。

列挙クラス定義に変更を加えても MATLAB によるオブジェクトの読み込みが妨げられない場合 (すなわち、変更されたクラス定義内に、MAT ファイル内のすべての名前付きの値が存在する)、MATLAB はクラスが変更されているという警告を発行し、その列挙値を読み込みます。

以下の 5 つのケースでは、MATLAB は警告を発行します。ケース 1 では、定義されている結果はありません。ケース 2 から 5 では、MATLAB は、保存されたデータを struct と同じように可能なかぎり多く読み込みます。

  1. MATLAB でクラス定義を見つけることができない。

  2. クラスが列挙クラスではなくなっている。

  3. MATLAB がクラスを初期化できない。

  4. 読み込まれた列挙内に、クラス定義にない列挙メンバーが 1 つ以上ある。

  5. クラスがプロパティをもつ値ベースの列挙型の場合に、ファイルに存在しているプロパティがクラス定義に存在しない。

struct フィールド

ケース 2 から 5 では、返された struct には、以下のフィールドがあります。

  • ValueNames ― 文字列の cell 配列。列挙配列内の固有な値ごとに 1 つ。

  • ValuesValueNames 内で名付けられた列挙メンバーの対応値を含んでいる ValueNames と同じ次元の配列。列挙クラスの種類により異なりますが、Values は以下のいずれかである可能性があります。

    • 列挙クラスが組み込みクラスから派生している場合、配列クラスは組み込みクラスと同じです。配列内の値は各列挙メンバーの基本値です。

    • それ以外の場合、プロパティ名を表す struct 配列 ― 各列挙メンバーのプロパティ値ペア。単純な列挙型やハンドルベースの列挙型の場合、struct 配列はフィールドをもちません。

  • ValueIndices ― 元の列挙型と同じサイズの uint32 配列。各要素は ValueNamesValues 配列内のインデックスです。ValueIndices の内容は元の列挙配列内で各オブジェクトの値を表します。

関連するトピック