При инициализации массива объектов-дескрипторов 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 =
10MATLAB копирует второй экземпляр во все остальные элементы массива:
A(2,2).RandNumb
ans =
10A(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 методы для вашего класса.