Настройте Индексирование объектов

Индексирование объектов по умолчанию

MATLAB® классы поддерживают объектный массив, индексирующий по умолчанию. Много проектов класса не требуют никакой модификации к этому поведению.

Массивы позволяют вам сослаться и присвоить элементы массива с помощью преобразованного в нижний индекс обозначения. Это обозначение задает индексы определенных элементов массива. Например, предположите, что вы создаете два массива чисел (использование randi и конкатенация).

Создайте массив 3 на 4 целых чисел от 1 до 9:

A = randi(9,3,4)
A =

     4     8     5     7
     4     2     6     3
     7     5     7     7

Создайте 1 3 массив чисел 3, 6, 9:

B = [3 6 9];

Ссылка и элементы присвоения любого массива с помощью значений индекса в круглых скобках:

B(2) = A(3,4);
B
B =
     3     7     9

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

for k=1:3
   objArray(k) = MyClass;
end

Ссылаясь на второй элемент в объектном массиве, objArray, возвращает объект, созданный когда k = 2:

D = objArray(2);
class(D)
ans =

MyClass

Можно присвоить объект массиву объектов того же класса или неинициализированную переменную:

newArray(3,4) = D;

Массивы объектов ведут себя во многом как числовые массивы в MATLAB. Вы не должны реализовывать специальные методы предоставить стандартному поведению массивов ваш класс.

Для получения общей информации об индексации массива, смотрите Индексацию массива.

Настройте Индексирование объектов с модульными классами индексации

Начиная с R2021b. Рекомендуемый по Шаблонам кода для subsref и subsasgn Методов.

Чтобы изменить поведение индексации для вашего класса, наследуйтесь одному или нескольким модульным классам mixin индексации. Каждый класс ответственен за одну группу индексации операций:

Каждый класс задает абстрактные методы, которые обрабатывают детали каждой операции индексации, которую задает класс. Реализуйте эти методы, чтобы выполнить операции, которых требует ваш проект.

Можно наследоваться этим классам независимо. Например, можно настроить только индексацию круглых скобок путем наследования только RedefinesParen. Точка и поведения индексации фигурной скобки в этом случае являются поведениями MATLAB по умолчанию.

Можно также принять решение настроить всего один или два уровня индексации и передать дополнительные операции другому объекту MATLAB. Например, можно создать класс, который настраивает индексацию круглых скобок (использующий RedefinesParen) но использует поведение по умолчанию для точечных вызовов метода:

myInstance(2,1).value

Смотрите Настраивают Индексацию Круглых скобок для примера этого поведения.

Похожие темы