exponenta event banner

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

При инициализации массива объектов-дескрипторов MATLAB ® заполняет пустые элементы массива объектом по умолчанию. Для создания объекта по умолчанию MATLAB:

  • Один раз вызывает конструктор класса для получения объекта

  • Создание уникальных дескрипторов для каждого элемента массива

  • Копирование значений свойств из построенного объекта по умолчанию без повторного вызова конструктора.

InitHandleArray класс иллюстрирует это поведение.

classdef InitHandleArray < handle
   properties
      RandNumb
   end
   methods
      function obj = InitHandleArray
         obj.RandNumb = randi(100);
      end
   end
end

Собственность RandNumb содержит случайное число, которое InitHandleArray присваивает конструктор.

Рассмотрим, что происходит, когда MATLAB инициализирует массив, созданный путем назначения последнему элементу в массиве. (Последним элементом является элемент с наибольшими значениями индекса). Предположим, что значение RandNumb имущества InitHandleArray объект, назначенный элементу A(4,5) является 59:

A(4,5) = InitHandleArray;
A(4,5).RandNumb
ans =

     59

Элемент в расположении индекса A(4,5) является экземпляром InitHandleArray класс. Объект по умолчанию, используемый для элемента A(1,1) также является экземпляром InitHandleArray класс, но его RandNumb свойство имеет другое случайное число.

Чтобы заполнить предшествующие элементы массива, MATLAB вызывает конструктор класса для создания одного объекта. MATLAB копирует этот объект во все остальные элементы массива. Вызов конструктора для создания объекта по умолчанию привел к другому вызову randi функция, которая возвращает новое случайное число:

A(1,1).RandNumb
ans =

     10

MATLAB копирует второй экземпляр во все остальные элементы массива:

A(2,2).RandNumb
ans =

     10
A(2,3).RandNumb
ans =

    10

При инициализации массива объектов MATLAB назначает копию одного объекта пустым элементам массива. MATLAB предоставляет каждому объекту уникальный дескриптор, чтобы впоследствии каждому объекту можно было назначить различные значения свойств. Объекты не эквивалентны:

A(1,1) == A(2,2)
ans =

     0

То есть ручка A(1,1) не ссылается на тот же объект, что и A(2,2). Создание массива с инструкцией, например:

A(4,5) = InitHandleArray;

приводит к двум вызовам конструктора класса. Первый создает объект для элемента массива A(4,5). Второй создает объект по умолчанию, который MATLAB копирует во все оставшиеся пустые элементы массива.

Связанная информация

Сведения об управлении массивами см. в разделе Многомерные массивы

Сведения о назначении значений свойствам см. в разделе Инициализация свойств для обработки объектов.

Сведения о реализации см. в разделе Индексирование массива объектов subsasgn методы для вашего класса.