Matlab упс - как я могу обрабатывать ввод конструктора?
У меня есть класс ручки, т.е. mclass
ниже, который должен быть построен внутри другой функции с соответствующим входным аргументом. Тем не менее, я хочу проверить входной аргумент конструктора класса внутри конструктора, где бы он ни находился в самом классе, и предотвратить создание нового дескриптора объекта, если ввод не является желаемым типом.
classdef mclass < handle
properties
val
end
properties (Dependent)
sval
end
methods
function obj = mclass(varargin)
if nargin == 1
if isnumeric(varargin{1}) && varargin{1} > 0
obj.val = varargin{1};
else
errordlg('Invalid input', 'Constructor', 'modal');
end
else
errordlg('No input', 'Constructor', 'modal');
end
end
function s = get.sval(obj)
s = sqrt(obj.val);
end
end
end
Однако после звонка m = mclass;
или же m = mclass(0);
из окна команд, вместе с диалоговым окном ошибки, переменная m
все еще создается в рабочей области. Как я могу предотвратить m
создается?
Конечно, я могу проверить входные данные внутри других моих функций перед вызовом конструктора, но есть ли способ сделать это характеристикой самопроверки класса?
1 ответ
errordlg
не останавливает выполнение программы. Он отображает только диалог. Для того, чтобы остановить вашу программу дополнительно, вам нужно вызвать ошибку. Вы можете комбинировать оба и использовать следующие строки, которые остановят создание объекта, когда вы выдадите ошибку.
function obj = mclass(varargin)
if nargin == 1
if isnumeric(varargin{1}) && varargin{1} > 0
obj.val = varargin{1};
else
errordlg('Invalid input', 'Constructor', 'modal');
error('Invalid input for Constructor of mclass');
end
else
errordlg('No input', 'Constructor', 'modal');
error('No input for Constructor of mclass');
end
end