Возможно ли определить более одного конструктора классов в Matlab? Если да, то как?
Множественный конструктор классов Matlab
Ответ 1
У каждого класса есть один конструктор. Однако... конструктор может принимать любое количество и тип аргументов, включая аргументы, основанные на varargin
.
Итак, чтобы предоставить опцию третьего аргумента по умолчанию в Java, вы могли бы написать что-то вроде этого (примеры, основанные на документации Java):
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
public Bicycle(int startCadence, int startSpeed) {
gear = 1;
cadence = startCadence;
speed = startSpeed;
}
В Matlab вы могли бы написать
classdef Bicycle < handle
properties (Access=public)
gear
cadence
speed
end
methods (Access = public)
function self = Bicycle(varargin)
if nargin>2
self.gear = varargin{3};
else
self.gear = 1;
end
self.cadence = varargin{1};
self.speed = varargin{2};
end
end
end
Ответ 2
Каждый класс имеет только один конструктор, и каждый .m файл может содержать только одно определение класса.
Если вы хотите иметь класс с небольшими различиями в зависимости от ввода, вы можете использовать свойства, определяющие ключи, которые распознаются методами класса. Если вы хотите иметь очень разные классы в зависимости от ввода, вы можете создать generateClass
-функцию, которая будет вызывать один или другой класс, определенный в разных файлах. Конечно, если эти разные классы имеют множество общих методов и свойств, вы можете создать их как подклассы для общего суперкласса.
Ответ 3
Ответ Pursuit работает, но пользователь, не знакомый с функцией, не может видеть, сколько аргументов необходимо или для чего они нужны. Я бы порекомендовал это:
methods (Access = public)
function self = Bicycle(startCadence, startSpeed, startGear)
if nargin>2
self.gear = startGear;
else
self.gear = 1;
end
self.cadence = startCadence;
self.speed = startSpeed;
end
end
Если вы сейчас наберете "Bicycle (") и подождите, вы увидите по крайней мере три аргумента. Хотя вторая возможность не показана. Это кажется возможным (например, для сюжета), но я не знаю, как это сделать.
Ответ 4
Нет. Конструкторы в ООП matlab очень ограничены по сравнению с другими языками. В документации AFAIK явно не указано, что у вас может быть несколько конструкторов, но в документации упоминается конструктор класса в единственном числе.
https://www.mathworks.com/help/matlab/matlab_oop/class-constructor-methods.html