subsasgn

Переопределите преобразованное в нижний индекс присвоение

Синтаксис

A = subsasgn (A, S, B)

Описание

A = subsasgn(A,S,B), вызванный MATLAB® для синтаксиса A(i) = B, A{i} = B или A.i = B, когда A является объектом.

MATLAB использует встроенную функцию subsasgn, чтобы интерпретировать индексированные операторы присваивания. Измените индексируемое поведение присвоения классов путем перегрузки subsasgn в классе.

Примечание

Необходимо вызвать subsasgn с выходным аргументом. subsasgn не изменяет объект, используемый в операции индексации (первый входной параметр). Необходимо присвоить вывод, чтобы получить измененный объект.

Входные параметры

A

Объект используется в индексации операции

S

Структура с двумя полями, type и subs. Для составных выражений индексации S является массивом структур, один для каждого уровня индексации.

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

  • subs является массивом ячеек, символьным массивом или массивом строк, содержащим фактические индексы.

B

Значение присвоено (правая сторона оператора присваивания)

Выходные аргументы

A

Результат оператора присваивания, который является измененным объектом, передал в в качестве первого аргумента.

Если ваша реализация метода subsasgn присваивает больше чем одно значение, используйте varargin для третьего входного параметра. Для получения дополнительной информации смотрите Синтаксис для subsref и subsasgn Методы.

Примеры

Значения аргументов для subsasgn для показанного выражения:

A(1:2,:) = B;

A(1:2,:) = B синтаксиса вызывает A = subsasgn(A,S,B), где S является структурой с S.type = '()' и S.subs = {1:2,':'}. Символ двоеточия (':') указывает на двоеточие, используемое в качестве индекса.

Для выражения:

A{1:2} = B;

Синтаксис A{1:2} = B вызывает A = subsasgn(A,S,B) где S.type = '{}' и S.subs = {[1 2]}.

Для выражения:

A.field = B;

Синтаксис A.field = B вызывает A = subsasgn(A,S,B) где S.type = '.' и S.subs = 'field'.

Для выражения:

A(1,2).name(3:5) = B;

Простые вызовы объединяются прямым способом к более сложным выражениям индексации. В таких случаях length(S) является количеством индексирования уровней. Например, A(1,2).name(3:5) = B вызывает A = subsasgn(A,S,B), где S является массивом 3 на 1 структур со следующими значениями:

S1 . введите =' ()'S2 . введите = '.'S(3).type = '()'
S1 . нижние индексы = {1,2}S2 . нижние индексы = 'имя'S(3).subs = {[3 4 5]}

Советы

В рамках метода subsasgn, заданного классом, MATLAB вызывает встроенный subsasgn. Вызов встроенного позволяет вам использовать поведение индексации значения по умолчанию при определении специализированной индексации. Для получения дополнительной информации смотрите Встроенный subsref и subsasgn, Названный в Методах.

Алгоритмы

В присвоении A(J,K,...) = B(M,N,...), J индексов, K, M, N, и так далее, может быть скаляром, вектором или массивами, когда все следующее верно:

  • Количество индексов, указанных для B, исключая запаздывающие индексы, равные 1, не превышает значение, возвращенное ndims(B).

  • Количество нескалярных индексов, указанных для A, равняется количеству нескалярных индексов, указанных для B. Например, A(5,1:4,1,2) = B(5:8) допустим, потому что обе стороны уравнения используют один нескалярный индекс.

  • Порядок и длина всех нескалярных индексов, указанных для A, совпадают с порядком и длиной нескалярных индексов, указанных для B. Например, A(1:4,3,3:9) = B(5:8,1:7) допустим, потому что обе стороны уравнения (игнорирующий один скалярный нижний 3) используют индекс с 4 элементами, сопровождаемый индексом с 7 элементами.

Расширенные возможности

Представлено до R2006a

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