メインコンテンツ

saveobj

オブジェクトの保存プロセスをカスタマイズする

説明

メモ

loadobj および saveobj よりも matlab.mixin.CustomElementSerialization クラスが推奨されます。これは、mixin では、プロパティの追加、削除、名前変更など、オブジェクトのシリアル化および逆シリアル化の方法をより詳細に制御できるためです。 (R2024b 以降)

b = saveobj(a) は、a のクラスが saveobj メソッドを定義する場合、save 関数によって呼び出されます。save 関数は、戻り値 b を MAT ファイルに書き込みます。

すべて折りたたむ

ContactEntry クラスは 3 つのプロパティを定義します。このクラスは、これらのプロパティ値を構造体に保存する saveobj メソッドと、保存された構造体からオブジェクトを再作成する loadobj メソッドを定義します。

classdef ContactEntry
   properties
      Name
      Email
      Cell
   end
   methods
      function s = saveobj(obj)
         s.Name = obj.Name;
         s.Email = obj.Email;
         s.Cell = obj.Cell;
      end
   end
   methods (Static)
      function obj = loadobj(s)
         if isstruct(s)
            newObj = ContactEntry;
            newObj.Name = s.Name;
            newObj.Email = s.Email;
            newObj.Cell = s.Cell;
            obj = newObj;
         else
            obj = s;
         end
      end
   end
end

ContactEntry のインスタンスを作成し、保存します。

a = ContactEntry;
a.Name = "Sandy Trent";
a.Email = "strent@notacompany.com";
a.Cell = "617-555-1212";
save("C:\yourpath\ContactFile.mat","a");

ContactEntry を修正して、勤務先の電話番号を保持する新しいプロパティを含めます。

classdef ContactEntry
   properties
      Name
      Email
      Cell
      WorkPhone
   end
   properties (Transient,Hidden)
      SaveInOldFormat = false;
   end
   methods
      function s = saveobj(obj)
         s.Name = obj.Name;
         s.Email = obj.Email;
         s.Cell = obj.Cell;
         if ~obj.SaveInOldFormat
             s.WorkPhone = obj.WorkPhone;
         end
      end
   end
   methods (Static)
      function obj = loadobj(s)
         if isstruct(s)
            newObj = ContactEntry;
            newObj.Name = s.Name;
            newObj.Email = s.Email;
            newObj.Cell = s.Cell;
            if numel(fieldnames(s)) == 4
                newObj.WorkPhone = s.WorkPhone;
            else
                newObj.WorkPhone = "unknown";
            end
            obj = newObj;
         else
            obj = s;
         end
      end
   end
end
2 つのクラス バージョン間の互換性を維持するために、以下を行いました。

  • シリアル化された構造体内の 4 番目のフィールドをチェックするように loadobj メソッドを変更しました。4 番目のフィールドがある場合、loadobjWorkPhone プロパティをその値に設定します。ない場合、WorkPhone プロパティを "unknown" に設定します。

  • 新しい過渡的な非表示のプロパティ SaveInOldFormat により、クラス ユーザーは、WorkPhone プロパティ値なしで、クラスのインスタンスを古い形式でシリアル化するかどうかを指定できます。saveobj メソッドは、SaveInOldFormatfalse の場合にのみ WorkPhone 値を保存します。

既存のインスタンス a をメモリからクリアし、クラスの新しい定義の下で a を読み込みます。修正された loadobj メソッドは、保存されたデータがクラスの古いバージョンのものであると認識し、WorkPhone を適切に設定します。

clear a
load("C:\yourpath\ContactFile.mat","a")
a
a = 

  ContactEntry with properties:

         Name: "Sandy Trent"
        Email: "strent@notacompany.com"
         Cell: "617-555-1212"
    WorkPhone: "unknown"
同様に、WorkPhone の値をもつクラスの新しいインスタンスを作成でき、saveobjloadobj の両方のメソッドは、新しいクラス定義の下でその値の保存と読み込みを期待どおりに行います。

入力引数

すべて折りたたむ

シリアル化するオブジェクト。

出力引数

すべて折りたたむ

MATLAB® によって save 関数に渡されるデータ。次のものがあります。

  • オブジェクト

  • 構造体に格納されているプロパティ名と現在の値

ヒント

  • スカラー オブジェクトまたは構造体を扱えるように saveobj メソッドを実装します。オブジェクト配列を保存すると、save は配列の各要素に対して saveobj を呼び出します。

バージョン履歴

R2006a より前に導入