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