メインコンテンツ

loadobj

オブジェクトの読み込み過程をカスタマイズ

説明

メモ

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

b = loadobj(a) は、a で表されるオブジェクトを逆シリアル化します。MAT ファイルから読み込む際にクラスのオブジェクトで特別な処理が必要になる場合は、loadobj メソッドを定義します。saveobj メソッドを定義する場合、loadobj メソッドを定義してオブジェクトを目的の状態に戻します。オブジェクトのクラスで loadobj メソッドが定義されている場合、load はそのメソッドを自動的に呼び出します。

すべて折りたたむ

リスナーをオブジェクトとともにシリアル化することはできません。クラスでリスナーが定義されている場合は、loadobj を使用することで、インスタンスが逆シリアル化されたときにリスナーを復元できます。

BankAccount クラスを定義します。このクラスには、AccountBalance プロパティと AccountStatus プロパティが含まれます。一時プロパティ AccountManagerListener は、AccountBalance の値に基づいて AccountStatus を変更するリスナー オブジェクトを保持します。

classdef BankAccount < handle
   properties (SetObservable,AbortSet)
      AccountBalance
   end
   properties (Transient)
      AccountManagerListener
   end
   properties
      AccountStatus
   end
   methods
      function obj = BankAccount(initialBalance)
         obj.AccountBalance = initialBalance;
         obj.AccountStatus = "New Account";
         obj.AccountManagerListener = addlistener(obj,...
            "AccountBalance","PostSet",@(src,evt)assignStatus(obj));
      end
      function assignStatus(obj,~)
         if obj.AccountBalance < 0
             obj.AccountStatus = "Overdrawn";
         else
            obj.AccountStatus = "Open";
         end
      end
   end
end

BankAccount のインスタンスを作成します。

x = BankAccount(100)
x = 

  BankAccount with properties:

            AccountBalance: 100
    AccountManagerListener: [1×1 event.proplistener]
             AccountStatus: "New Account"

AccountBalance プロパティを負の金額に設定し、AccountStatus への変化を確認します。

x.AccountBalance = -100
x = 

  BankAccount with properties:

            AccountBalance: -100
    AccountManagerListener: [1×1 event.proplistener]
             AccountStatus: "Overdrawn"

save を呼び出して x をシリアル化した場合、AccountManagerListener はシリアル化されません。load を呼び出したときにイベント リスナーを復元するには、リスナーを再作成して AccountManagerListener に割り当てる BankAccountloadobj メソッドを定義します。

methods (Static)
   function obj = loadobj(obj)
      if isstruct(obj)
         initialBalance = obj.AccountBalance;
         obj = BankAccount(initialBalance);
      else
         obj.AccountManagerListener = addlistener(obj,...
         "AccountBalance","PostSet",@(src,evt)assignStatus(obj));
      end
   end
end

x を保存してからクリアします。x を読み込んで、loadobj によってイベント リスナーが再作成されたことを確認します。

save("C:\yourpath\AccountTest.mat","x")
clear x
load("C:\yourpath\AccountTest.mat","x")
x
x = 

  BankAccount with properties:

            AccountBalance: -100
    AccountManagerListener: [1×1 event.proplistener]
             AccountStatus: "Overdrawn"

入力引数

すべて折りたたむ

MAT ファイルから逆シリアル化する内容。次のものが可能です。

  • オブジェクト

  • load がオブジェクトを解決できない場合に load によって作成された構造体

  • 対応する saveobj メソッドによって作成された構造体

出力引数

すべて折りたたむ

MATLAB® により load 関数に渡されるオブジェクト。クラス loadobj メソッドにより返される値は、通常は読み込むクラスのオブジェクトです。ただし、loadobj メソッドは別のクラスのオブジェクトを返したり、新しいクラス定義に一致する更新されたオブジェクトを返したりする場合があります。

ヒント

  • loadobj を静的メソッドとして定義します。

  • スカラー オブジェクトまたは構造体を扱えるように loadobj メソッドを実装します。オブジェクト配列が逆シリアル化された後、保存された配列の各要素に対して loadloadobj を呼び出します。

  • 新しいバージョンのクラスがプロパティの削除や名前変更、検証の変更を行った場合、load が変更または削除されたプロパティの設定を試みるとエラーが発生することがあります。クラスで loadobj メソッドが定義されている場合、MATLAB は struct を用いて、保存された値を loadobj メソッドに返します。保存されたオブジェクトが、同じ名前のプライベート プロパティをもつ複数のスーパークラスから派生している場合、struct にはすぐ上のスーパークラスのプロパティ値のみが含まれます。

  • サブクラスのオブジェクトを読み込む場合、関数 load はサブクラスの loadobj メソッドのみを呼び出します。loadobj メソッドがスーパークラスで定義されると、サブクラスはこのメソッドを継承します。ただし、継承されたメソッドは、サブクラスのオブジェクトを読み込むために必要な操作を実行しない可能性があります。アプリケーションに必要な場合は、スーパークラスの loadobj メソッドをオーバーライドすることを検討してください。サブクラスの loadobj からスーパークラスの loadobj を呼び出すこともできます。

バージョン履歴

R2006a より前に導入