オブジェクト配列の初期化
コンストラクターの呼び出し
オブジェクトの配列の作成中、MATLAB® は、コンストラクターがオブジェクトの配列を作成しない場合でも、引数なしでクラス コンストラクターを呼び出すことができます。たとえば、次のクラスを定義するとします。
classdef SimpleValue properties Value end methods function obj = SimpleValue(v) obj.Value = v; end end end
次のステートメントを実行して配列を作成します。
a(1,7) = SimpleValue(7)
Error using SimpleValue (line 7)
Not enough input arguments.
このエラーが発生するのは、配列内の 1
から 6
までの要素を初期化するために、MATLAB が引数なしでコンストラクターを呼び出すためです。
このクラスでは入力引数なしのコンストラクター構文をサポートしなければなりません。簡単な解決法は、nargin
をテストし、nargin == 0
のときにコードを実行しなくてもエラーとならないようにします。
classdef SimpleValue properties Value end methods function obj = SimpleValue(v) if nargin > 0 obj.Value = v; end end end end
クラス定義を次のように変更すると、上記の配列代入ステートメントがエラーなしで実行されます。
a(1,7) = SimpleValue(7)
a = 1x7 SimpleValue array with properties: Value
配列の要素に割り当てられた a(1,7)
オブジェクトは、コンストラクターに渡された入力引数をプロパティに割り当てられた値として使用します。
a(1,7)
ans = SimpleValue with properties: Value: 7
MATLAB は、要素 a(1,1:6)
に含まれるオブジェクトを入力引数なしで作成しました。プロパティの既定値は空 []
です。たとえば、次のようになります。
a(1,1)
ans = SimpleValue with properties: Value: []
MATLAB は SimpleValue
コンストラクターを 1 回呼び出し、返されたオブジェクトを配列の各要素にコピーします。
オブジェクトのプロパティの初期値
MATLAB でオブジェクト配列を初期化するために引数なしでコンストラクターが呼び出される場合には、次のいずれかの割り当てが行われます。
プロパティの定義で既定値が指定されている場合は、MATLAB がこれらの値を割り当てます。
入力引数がないときにコンストラクターが値を割り当てた場合は、これらの値が割り当てられます。
上記のいずれも該当しない場合、MATLAB はプロパティに空の double (つまり、
[]
) を代入します。