Индексированные ссылки на объекты имеют три формы - круглые скобки, скобки и имя точки:
A(I) A{I} A.name
Каждая из этих операторов приводит к вызову MATLAB® в subsref
класса A
, или вызов встроенного subsref
function, если класс A
не реализует subsref
способ.
MATLAB передает два аргумента в subsref
и требует subsref
для возврата результата индексированной ссылки:
B = subsref(A,S)
Первый аргумент - это объект, на который ссылаются, A
. Второй аргумент, S
, является substruct
с двумя полями:
S.type
является char
вектор, содержащий '()'
, '{}'
, или '.'
указание используемого типа индексации.
S.subs
является массивом ячеек или char
вектор, содержащий фактический индекс или имя. Двоеточие, используемое в качестве индекса, передается в массиве ячеек как символ двоеточия ':'
. Области значений, заданные с помощью двоеточия (например 2:5
) расширены до 2 3 4 5
.
Для примера выражение:
A(1:4,:)
Вызывает вызов MATLAB subsref(A,S)
, где S
является структурой 1 на 1 с двухэлементным массивом ячеек. Массив ячеек содержит числа 1, 2, 3, 4 и символ двоеточия :
.
S.type = '()' S.subs = {1:4,':'}
Возврат содержимого каждой камеры S.subs
приводит значения индекса для первой размерности и char
векторная ':'
для второго измерения:
S.subs{:}
ans = 1 2 3 4 ans = :
Значение по умолчанию subsref
возвращает все элементы массива в строках с 1 по 4 и все столбцы массива.
Точно так же это выражение:
A{1:4}
Использует массив ячеек, содержащий числа 1, 2, 3, 4.
S.type ='{}'
S.subs = {1:4}
Значение по умолчанию subsref
возвращает содержимое всех элементов массива ячеек в строках с 1 по 4 и все столбцы массива.
Это выражение:
A.Name
Вызовы subsref(A,S)
, где struct
S
имеет следующие значения:
S.type = '.' S.subs = 'Name'
Эти простые вызовы объединяются для более сложных выражений индексации. В таких случаях length(S)
количество уровней индексации. Для примера,
A(1,2).PropertyName(1:4)
вызывает subsref(A,S)
, где S
массив 3х1 structs
со значениями:
S(1).type = '()' S(2).type = '.' S(3).type = '()' S(1).subs = {1,2} S(2).subs = 'PropertyName' S(3).subs = {1:4}