Переопределение подписанного назначения
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
не изменяет объект, используемый в операции индексации (первый входной параметр). Для получения измененного объекта необходимо назначить выход.
|
Объект, используемый в операции индексации |
|
Структура с двумя полями,
|
|
Присваиваемое значение (правая сторона оператора назначения) |
|
Результат оператора назначения, который является измененным объектом, переданным в качестве первого аргумента. Если ваша реализация |
Значения аргументов для 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
. Вызов встроенного позволяет использовать поведение индексации по умолчанию при определении специализированного индексирования. Для получения дополнительной информации см. «Встроенная подпрограмма» и 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-элементный индекс.