Назначения, индексированные по объекту, имеют три формы - круглые скобки, скобки и имя точки:
A(I) = B
A{I} = B
A.name = B
Каждая из этих операторов приводит к вызову MATLAB® в subsasgn метод класса A, или вызов встроенного subsasgn function, если класс A не реализует subsasgn способ.
MATLAB передает три аргумента subsasgn и требует subsasgn для возврата результата присвоения:
A = subsasgn(A,S,B)
Первый аргумент, A, присваивается ли объекту значение в третьем аргументе B.
Вторым аргументом является структура индексации, substruct. S имеет два поля:
S.type является char вектор, содержащий '()', '{}', или '.' указание используемого типа индексации.
S.subs - массив ячеек или символьный массив, содержащий действительные индексы или имя поля. Двоеточие, используемое в качестве индекса, передается в массиве ячеек в качестве символа ':'. Области значений, заданные с помощью двоеточия (например 2:5) расширены до 2 3 4 5.
Для примера оператор назначения:
A(2,3) = B;
генерирует вызов для subsasgn:
A = subsasgn(A,S,B)
S содержит:
S.type = '()'
S.subs = {2,3}Встроенный subsasgn:
Определяет класс A. Если B не является тем же классом, что и A, затем MATLAB пытается создать объект того же класса, что и A использование B как входной параметр. Если эта попытка не удалась, MATLAB возвращает ошибку.
Если A и B или может быть сделан, в тот же класс, затем MATLAB назначает значение B к элементу массива в строке 2, столбец 3.
Если A не существует до выполнения оператора назначения, затем MATLAB инициализирует пять элементов массива, которые приходят раньше A(2,3) с объектами класса по умолчанию B.
Точно так же это выражение
A{2,3} = B
Использует эти значения для S:
S.type ='{}'
S.subs = {2,3}
Встроенный subsasgn:
Присваивает B в cell элемент массива в строке 2, столбец 3.
Если A не существует до выполнения оператора назначения, MATLAB инициализирует пять камеры, которые приходят раньше A(2,3) с []. Результатом является массив ячеек 2 на 3.
Это выражение:
A.Name = B
Вызовы A = subsasgn(A,S,B) где struct
S имеет следующие значения:
S.type = '.' S.subs = 'Name'
Встроенный subsasgn:
Присваивает B в struct полевые Name.
Если A не существует до выполнения оператора назначения, MATLAB создает struct переменная, A с Name поля и присваивает значение B в это место поля.
Если struct
A существует, но не имеет поля Name, затем MATLAB добавляет поле Name и присваивает значение B к новому месту расположения месторождения.
Если struct
A существует и имеет Name , затем MATLAB присваивает значение B на Name.
Можно переопределить все или некоторые из этих поведений назначения путем реализации subsasgn метод для вашего класса.
Если A является объектом, это выражение:
A.Name = B
Вызовы A = subsasgn(A,S,B) где, S имеет следующие значения:
S.type = '.' S.subs = 'Name'
Значение по умолчанию subsasgn:
Попытка назначить B на Name свойство.
Если класс A не имеет Name свойство, MATLAB возвращает ошибку.
Если на Name свойство имеет ограниченный доступ (private или protected), MATLAB определяет, разрешено ли назначение, на основе контекста, в котором выполняется назначение.
Если класс A задает метод набора для свойства NameMATLAB вызывает метод set.
MATLAB применяет все другие атрибуты свойств перед определением, назначать ли B к свойству Name.
Эти простые вызовы объединяются для более сложных выражений индексации. В таких случаях length(S) количество уровней индексации. Для примера,
A(1,2).PropertyName(1:4) = B
вызывает subsasgn(A,S,B), где S массив структур 3 на 1 со значениями:
S(1).type = '()' S(2).type = '.' S(3).type = '()'
S(1).subs = {1,2} S(2).subs = 'PropertyName' S(3).subs = {1:4}