Неявное преобразование класса

Механизм преобразования класса

Когда вы создаете или изменяете массивы объектов с помощью конкатенации или преобразованного в нижний индекс присвоения, MATLAB® пытается преобразовать различающиеся типы, чтобы соответствовать классу массива.

Чтобы выполнить преобразование, MATLAB пытается вызвать метод конвертера, заданный классом, который будет преобразован. Метод конвертера имеет то же имя как целевой класс. Например, если класс задает метод под названием double, этот метод преобразует объект класса к объекту класса double.

Если никакой конвертер не существует, MATLAB передает объект, который будет преобразован в конструктора целевого класса.

И конкатенация и преобразованное в нижний индекс присвоение могут заставить 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) = B.ClassA % Call method of ClassB

Если никакой метод конвертера не существует, MATLAB передает исходный объект целевому конструктору класса:

A(2) = ClassA(B) % Call ClassA constructor

Похожие темы