0

我有一个句柄类,即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被创建?

当然我可以在调用构造函数之前检查我的其他函数中的输入,但是无论如何让它成为类的“自检”特性?

4

1 回答 1

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
于 2015-09-04T16:51:00.033 回答