MATLAB® может использовать объекты в качестве индексов в индексируемых выражениях. Правила индексации массива применяются — индексы должны быть положительными целыми числами. Поэтому MATLAB должен смочь получить значение на объект, который является положительным целым числом для использования в индексируемом выражении.
Индексируемые выражения как X(A)
, где A
является объектом, причина MATLAB, чтобы вызвать функцию subsindex
. Однако, если выражение индексации приводит к вызову перегруженного subsref
или метода subsasgn
, заданного классом X
, то MATLAB не вызывает subsindex
.
Существует несколько способов реализовать индексацию одного объекта другим объектом, X(A)
:
Задайте метод subsindex
в классе A
, который преобразовывает A
в целое число. MATLAB вызывает метод subsindex
A
, чтобы выполнить операции индексации, когда класс X
не перегружает subsref
или subsasgn
.
Если класс перегрузок X
subsref
или subsasgn
, эти методы могут вызвать метод subsindex
A
явным образом. Класс A
должен реализовать метод subsindex
, который возвращает соответствующее значение.
Если класс перегрузок X
subsref
или subsasgn
, эти методы могут содержать код, который определяет целочисленное индексное значение. В этом случае класс A
не реализует метод subsindex
.
subsindex
должен возвратить значение объекта как индексное значение нулевого числа с основанием в области значений 0
к prod(size(X))-1
.
Предположим, что вы хотите использовать объект A
индексировать в объект B
. B
может быть отдельным объектом или массивом, в зависимости от проектов класса.
C = B(A);
Вот два примера методов subsindex
. Первое принимает, что можно преобразовать класс A
в uint8
. Второе принимает класс, A
хранит индексное значение в свойстве.
Метод subsindex
, реализованный классом A
, может преобразовать объект в числовой формат, который будет использоваться в качестве индекса:
function ind = subsindex(obj) ind = uint8(obj); end
Класс obj
реализует метод uint8
, чтобы обеспечить преобразование от объекта до целочисленного значения.
A
класса реализует subsindex
, чтобы возвратить числовое значение, которое сохранено в свойстве:
function ind = subsindex(obj) ind = obj.ElementIndex; end
Значения subsindex
на основе 0, не на основе 1.
numArgumentsFromSubscript
| subsasgn
| subsref