Индексированные присвоения объекта находятся в трех формах — круглые скобки, фигурные скобки и точечное имя:
A(I) = B
A{I} = B
A.name = B
Каждый из этих операторов приводит к вызову MATLAB® к subsasgn метод класса A, или вызов встроенного subsasgn функционируйте если класс A не реализует subsasgn метод.
MATLAB передает три аргумента subsasgn и требует subsasgn возвращать результат присвоения:
A = subsasgn(A,S,B)
Первый аргумент, A, объект, присваиваемый значение в третьем аргументе B.
Второй аргумент является структурой индексации, substructS имеет два поля:
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 задает метод установки для свойства Name, MATLAB вызывает метод установки.
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}