このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
基本的な saveobj
と loadobj
のパターン
saveobj
と loadobj
の使用
ユーザー クラスの要件に応じて、saveobj
および loadobj
メソッドをさまざまな方法で使用できます。ここでのパターンは、単純な方法では対処できないさまざまな問題を解決する柔軟な方法です。
基本的なプロセスは次のとおりです。
struct
フィールドにプロパティ値を保存できない場合、この方法は有用ではありません。ファイル識別子など、保存できないデータは loadobj
メソッドで再生成できる場合があります。
loadobj
メソッドを実装せずに saveobj
メソッドを実装した場合、MATLAB® は現在のクラス定義を使用して、クラスの既定のオブジェクトを読み込みます。saveobj
メソッドで保存したデータを使用してオブジェクトを作成するには、クラスに loadobj
メソッドを追加してください。
saveobj
このパターンでは、クラスのオブジェクトを受け入れて struct
を返す通常のメソッドとして saveobj
を定義します。
各プロパティ値を同名の構造体フィールドにコピーします。
オブジェクトをリビルドするのに必要なデータのみを保存できます。オブジェクト階層全体 (グラフによって作成されたものなど) の保存は避けてください。
methods function s = saveobj(obj) s.Prop1 = obj.Prop1; s.Prop2 = obj.Prop2 s.Data = obj.GraphHandle.YData; end end
loadobj
loadobj
を静的メソッドとして定義します。クラス コンストラクターを呼び出してオブジェクトを作成します。そして、loadobj
に渡された struct
からプロパティに値を代入します。このデータを使用して、保存されていないプロパティを再生成します。
methods(Static) function obj = loadobj(s) if isstruct(s) newObj = ClassConstructor; newObj.Prop1 = s.Prop1; newObj.Prop2 = s.Prop2 newObj.GraphHandle = plot(s.Data); obj = newObj; else obj = s; end end end
関数 load
でエラーが発生した場合、load
は loadobj
にオブジェクトではなく struct
を渡します。loadobj
メソッドは、常に struct
を入力引数として扱えるようにしておかなければなりません。loadobj
への入力は常にスカラーです。
読み込みの問題の処理
loadobj
は、saveobj
メソッドを使用していない場合でも struct
入力を処理できます。
GraphExpression
クラスは、データの指定範囲にわたって MATLAB 式のグラフを作成します。GraphExpression
は loadobj
メソッドを使用して、オブジェクトで保存されていないグラフを再生成します。
classdef GraphExpression properties FuncHandle Range end methods function obj = GraphExpression(fh,rg) obj.FuncHandle = fh; obj.Range = rg; makeGraph(obj) end function makeGraph(obj) rg = obj.Range; x = min(rg):max(rg); data = obj.FuncHandle(x); plot(data) end end methods (Static) function obj = loadobj(s) if isstruct(s) fh = s.FuncHandle; rg = s.Range; obj = GraphExpression(fh,rg); else makeGraph(s); obj = s; end end end end
save および load オブジェクト
無名関数を使用し、データの範囲を入力としてオブジェクトを作成します。
h = GraphExpression(@(x)x.^4,[1:25])
h = GraphExpression with properties: FuncHandle: @(x)x.^4 Range: [1x25 double]
GraphExpression
オブジェクトを保存してグラフを閉じます。
save myFile h close
オブジェクトを読み込みます。MATLAB によりグラフが再作成されます。
load myFile h
関数 load
がオブジェクトを作成できないまま struct
を loadobj
に渡すと、loadobj
は与えられたデータでオブジェクトの作成を試みます。