Переопределите преобразованное в нижний индекс присвоение
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
. Вызов встроенного позволяет вам использовать поведение индексации значения по умолчанию при определении специализированной индексации. Для получения дополнительной информации смотрите Встроенный 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 элементами.