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

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

Во время создания объектных массивов 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 присваивает значение двойных пустых (то есть, []) к свойству.

Похожие темы

Была ли эта тема полезной?