При инициализации массива объектов указателя 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 копирует во все остающиеся элементы пустого массива.
Для получения информации о манипуляции с массивами смотрите Многомерные массивы
Смотрите Initializing Properties, чтобы Обработать Объекты для получения информации о присвоении значений к свойствам.
Смотрите, что Объектный массив Индексирует для получения информации о реализации subsasgn
методы для вашего класса.