Переопределите преобразованное в нижний индекс присвоение
A = subsasgn(A,S,B)
Для классов, созданных в R2021b и позже, рекомендуемый процесс для настройки индексации должен наследоваться некоторой комбинации matlab.mixin.indexing.RedefinesParen, matlab.mixin.indexing.RedefinesDot, и matlab.mixin.indexing.RedefinesBrace. Для получения дополнительной информации смотрите, Настраивают Индексирование объектов.
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. Вызов встроенного позволяет вам использовать поведение индексации значения по умолчанию при определении специализированной индексации.
В присвоении A(J,K,...) = B(M,N,...), индексы JKMN, и так далее, может быть скаляр, вектор или массивы, когда все следующее верно:
Количество индексов задано для 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 элементами.