多类构造函数Matlab

bsm*_*mca 20 oop matlab

是否可以在Matlab中定义多个类构造函数?如果有,怎么样?

Pur*_*uit 28

每个类都有一个构造函数.但是......构造函数可以接受任何数量和类型的参数,包括基于的参数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;
}
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您不能在if语句中创建"self",因此第一次为"self"分配任何内容时必须在if子句之前或之后. (2认同)

Mo3*_*ius 6

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
Run Code Online (Sandbox Code Playgroud)

如果你现在输入“Bicycle(”并等待,你至少可以看到三个参数。虽然第二种可能性没有显示。这似乎是可能的(例如对于情节),但我不知道如何做到这一点。