У меня есть класс handle, т. Е. mclass
, который должен быть построен внутри другой функции с соответствующим входным аргументом. Тем не менее, я хочу проверить входной аргумент конструктора класса внутри конструктора, где бы он ни находился в самом классе, и предотвратить создание нового дескриптора объекта, если ввод не нужен.matlab oop - как я могу обрабатывать ввод конструктора?
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
?
Конечно, я могу проверить входные данные внутри моих других функций перед вызовом конструктора, но все равно, чтобы сделать его «самопроверкой» характеристики класса?
Да, ошибка была одним из моих обходных решений, но могу ли я сделать это полностью внутри программы? я имею в виду, что ничего не должно отображаться в окне команд (особенно уродливое 'Ошибка с использованием xxx (строка yyy)' 'error'), пользователям просто нужно сообщить, что они ошибочно вошли, им не нужно заботиться о где в какой функции ошибка была ... – scmg
Вам тогда понадобилось бы использовать try, catch и wrap class creation внутри другой функции, которая выполняет try, catch. Я не могу думать о другом. – Navan