是否可以在 Matlab 中定义多个类构造函数?如果是,如何?
4 回答
每个类都有一个构造函数。但是......构造函数可以接受任意数量和类型的参数,包括那些基于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
每个类只有一个构造函数,每个 .m 文件只能包含一个类定义。
如果您希望类根据输入略有不同,您可以使用定义类方法识别的开关的属性。如果你想根据输入有非常不同的类,你可以创建一个generateClass
函数来调用不同文件中定义的一个或另一个类。当然,如果这些不同的类有很多共同的方法和属性,您可以将它们创建为共同超类的子类。
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(”并等待,您至少可以看到三个参数。但没有显示第二种可能性。这似乎是可能的(例如情节),但我不知道该怎么做。
不。与其他语言相比,OOP matlab 中的构造函数非常受限。在文档 AFAIK 中没有明确说明您可以有多个构造函数,但它在整个文档中以单数形式指代类的构造函数。
https://www.mathworks.com/help/matlab/matlab_oop/class-constructor-methods.html