Инициализация массивов объектов

Вызовы в конструктор

Во время создания объектных массивов, 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.

Эта ошибка возникает из-за того, что MATLAB вызывает конструктор без аргументов, чтобы инициализировать элементы 1 через 6 в массиве.

Ваш класс должен поддерживать синтаксис конструктора без входных параметров. Простое решение - это тестирование 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 конструктор один раз и копирует возвращенный объект в каждый элемент массива.

Начальное значение свойств объекта

Когда MATLAB вызывает конструктор без аргументов для инициализации объектного массива, происходит одно из следующих назначений:

  • Если определения свойств задают значения по умолчанию, MATLAB присваивает эти значения.

  • Если конструктор присваивает значения в отсутствие входных параметров, MATLAB присваивает эти значения.

  • Если ни одна из предыдущих ситуаций не применяется, MATLAB присваивает значение пустого double (то есть []) к свойству.

Похожие темы