Конструктор класса Matlab без инициализации свойств

#matlab #class

#matlab #класс

Вопрос:

Аналогично C , где мы можем определить конструктор без инициализации, можем ли мы сделать это в Matlab classdef? Я пытался, но он жалуется, что «Тест уже определен», что означает, что я не могу определить две функции с одинаковым именем.

 classdef Test
    properties
        id;
    end
    methods
        %constructor without initialization
        function obj = Test
        end

        %constructor with initialization
        function obj = Test(x)
            obj.id = x;
            end
        end

end
  

Ответ №1:

Ваше определение конструктора может указывать входной аргумент, и технически он не должен передаваться пользователем. Вы можете использовать exist с именем входной переменной, чтобы определить, был ли предоставлен ввод, и присваивать значение свойства только в том случае, если ввод предоставлен.

 classdef Test
    properties
        id;
    end

    methods
        function obj = Test(x)
            if exist('x', 'var')
                obj.id = x;
            end
        end
    end
end
  

Комментарии:

1. Спасибо. какой идентификатор имеет более одного значения, скажем, Test(x, y) как изменить exist() ?

2. @daydayup Вы можете посмотреть документы для exist , но вы можете добавить еще if exist('y', 'var') один для y

3. Используйте «существует», если вам нужно, чтобы x и y присутствовали или отсутствовали независимо. В противном случае проверьте функцию nargin, которая дает вам количество входных аргументов.