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
Другие вопросы по тегам