私は、コンストラクタに提供される可能性のある、または他の方法で生成される可能性のあるプロパティを持つクラスを実装しようとしています。私は、データをディスクに保存したり、ロード時に生成したりしたくありません。私はこれまで持っていることは次のとおりです。一時的なプロパティのためにsaveメソッドを呼び出すMatlab OOPを呼び出します。
classdef MyClass
properties(GetAccess = public, SetAccess = private)
Property1
Property2
Property3
end
properties(Access = private)
Property4
end
properties(Transient = true)
ProblemProperty
end
properties(Dependent = true, Transient = true)
Property5
end
methods
function MyClass
% Constructor.
end
function val = get.Property5(B)
val = SomeFunction(Property1);
end
function val = get.ProblemProperty(B)
if isempty(B.ProblemProperty)
B = GenerateProblemProperty(B);
end
val = B.ProblemProperty;
end
function B = GenerateProblemProperty(B)
B.ProblemProperty = AnotherFunction(B.Property2);
end
end
end
問題は、私はディスクにオブジェクトを保存しようとすると、MATLABは(ちょうど声明を救う上でプロファイラを実行することによって確認した)get.ProblemPropertyメソッドを呼び出すことです。 ProblemPropertyフィールドは空で、そのままにしておきます。 get.Property5メソッドは呼び出されません。
get.ProblemPropertyの呼び出しを避けるにはどうすればよいですか?
私はこれについて考えましたが、値が実際にはコンストラクタで直接提供されることがあります。コンストラクタ内の依存プロパティの値を設定できますか? – MatlabSorter
@MatlabSorter - コンストラクタに渡されるオプションのカスタム値を許可するように私の答えを更新しました。要点は、このオプションの値を保存するためにプライベートプロパティを使用し、このプライベートプロパティを取得するか新しい値を生成するかを決定するget.ProblemPropertyです。 –
@ b3ありがとう、私はそれがすべきだと思います。私はMatlabが私の実装でなぜ呼び出すのか理解したいので、もう少し長く質問を残しておきます。 – MatlabSorter