Индексируемая ссылка

Как индексируемые ссылочные работы

Индексированные ссылки объекта находятся в трех формах — круглые скобки, фигурные скобки и точечное имя:

A(I)
A{I}
A.name

Каждый из этих операторов приводит к вызову MATLAB® к subsref класса A или вызов встроенной функции subsasgn, если класс A не реализует метод subsasgn.

MATLAB передает два аргумента subsref и требует, чтобы subsref возвратил результат индексируемой ссылки:

B = subsref(A,S)

Первый аргумент является ссылаемым объектом, A. Вторым аргументом, S, является substruct с двумя полями:

  • S. тип является символьным вектором, содержащим' ()', '{}', или'.' определение используемого типа индексации.

  • S. нижние индексы являются массивом ячеек или символьным вектором, содержащим фактический индекс или имя. Двоеточие, используемое в качестве индекса, передается в массиве ячеек как символ двоеточия ':'. Области значений задали использование двоеточия (e. g., 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) вызовов, где S struct имеет эти значения:

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}

Похожие темы

Была ли эта тема полезной?