exponenta event banner

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 для третьего входного аргумента. Дополнительные сведения см. в разделах Синтаксис для вложенных ссылок и Методы вложенных ссылок.

Примеры

Значения аргументов для 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 со следующими значениями:

S(1).type = '()'S(2).type = '.'S(3).type = '()'
S(1).subs = {1,2}S(2).subs = 'name'S(3).subs = {[3 4 5]}

Совет

В пределах subsasgn метод, определенный классом, MATLAB вызывает встроенный 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