При создании или изменении массивов объектов с использованием конкатенации или назначения подстрочных значений MATLAB ® пытается преобразовать типы, отличающиеся от типов, в соответствии с классом массива. MATLAB выполняет это преобразование неявно .
Для выполнения преобразования MATLAB пытается вызвать метод конвертера, определенный преобразуемым классом. Метод конвертера имеет то же имя, что и целевой класс. Например, если класс определяет метод с именем double, этот метод преобразует объект класса в объект класса double.
Если в классе исходного объекта не существует конвертера, этот вызов разрешается в вызов конструктора класса назначения.
Как конкатенация, так и подстрочное назначение могут привести к применению MATLAB этого механизма преобразования классов. Преобразование может быть успешным или привести к ошибке, если преобразование невозможно.
В операциях конкатенации доминирующий объект определяет класс результирующего массива. MATLAB определяет доминирующий объект следующим образом:
Определяемые пользователем классы доминируют над встроенными классами, такими как double.
Если между любыми двумя объектами нет определенного отношения доминирования, то доминирует самый левый объект
Например, в инструкции C = [A,B], если A является доминирующим объектом, MATLAB пытается преобразовать B к классу A.
В подстрочном назначении левая часть инструкции назначения определяет класс массива. Если элементы массива назначаются, когда правая сторона отличается от левой, MATLAB пытается преобразовать в класс левой стороны.
Например, назначение объекта ClassB к элементу массива A требует преобразования.
A = ClassA; B = ClassB; A(2) = B;
MATLAB сначала ищет метод конвертера, определенный классом исходного объекта B. Этот метод конвертера должен иметь имя ClassA в данном случае. Подстрочное назначение фактически является вызовом преобразователя, определенного ClassB:
A(2) = ClassA(B) % Call method of ClassBЕсли метод конвертера не существует, этот вызов разрешается вызову конструктора класса назначения:
A(2) = ClassA(B) % Call ClassA constructor