При инициализации массива объектов указателя 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
для вашего класса.