#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, которая дает вам количество входных аргументов.