Когда вы создаете или изменяете объектные массивы с помощью конкатенации или назначения под индексом, 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