matlab oop - 我如何处理构造函数的输入?

matlab oop - how could i handle input of constructor?

我有一个句柄 class,即下面的 mclass,它应该在另一个具有相应输入参数的函数中构造。但是,我想检查 class 构造函数内部的 class 构造函数的输入参数,如果输入不是所需的类型,则防止创建新的对象句柄。

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

但是,从命令 Window 调用 m = mclass;m = mclass(0); 后,连同错误对话框,变量 m 仍然在工作区中创建。如何防止创建 m

当然我可以在调用构造函数之前检查我的其他函数中的输入,但是有没有办法让它成为 class 的 "self-check" 特性?

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