Main Content

オブジェクト配列の初期化

コンストラクターの呼び出し

オブジェクトの配列の作成中、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 (つまり、[]) を代入します。

関連するトピック