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
我有一个句柄 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