Est-il possible de définir plus d'un constructeur de classe dans Matlab ? Si oui, comment ?
Réponses
Trop de publicités?Chaque classe possède un constructeur. Cependant ... le constructeur peut accepter n'importe quel nombre et n'importe quel type d'arguments, y compris ceux basés sur des varargin
.
Ainsi, pour offrir l'option d'un troisième argument par défaut en Java, vous pourriez écrire quelque chose comme ceci (exemples basés sur documentation 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;
}
Dans Matlab, vous pourriez écrire
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
La réponse de Pursuit fonctionne, mais un utilisateur non familiarisé avec la fonction ne peut pas voir combien d'arguments sont nécessaires ni à quoi ils servent. Je recommanderais ceci :
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
Si vous tapez maintenant "Bicycle(" et attendez, vous pouvez voir au moins les trois arguments. La deuxième possibilité n'est pas affichée. Cela semble possible (par exemple pour le tracé) mais je ne sais pas comment le faire.
Chaque classe ne possède qu'un seul constructeur et chaque fichier .m ne peut contenir qu'une seule définition de classe.
Si vous voulez avoir une classe avec de légères différences en fonction de l'entrée, vous pouvez utiliser des propriétés qui définissent des commutateurs qui sont reconnus par les méthodes de la classe. Si vous souhaitez avoir des classes très différentes en fonction de l'entrée, vous pouvez créer une classe generateClass
-qui appellera l'une ou l'autre classe définie dans des fichiers différents. Bien entendu, si ces différentes classes ont beaucoup de méthodes et de propriétés communes, vous pouvez les créer en tant que sous-classes d'une superclasse commune.
Les constructeurs dans OOP matlab sont très limités par rapport à d'autres langages. Il n'est pas explicitement indiqué dans la documentation AFAIK que vous pouvez avoir plusieurs constructeurs, mais il est fait référence au constructeur d'une classe au singulier dans toute la documentation.
https://www.mathworks.com/help/matlab/matlab_oop/class-constructor-methods.html