exponenta event banner

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

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

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

Связанные темы