如何在MATLAB类构造函数中不符合条件时阻止对象创建?
解决MATLAB构造函数参数不满足时不创建对象的问题
有两种实用方法可以实现你的需求,无需在脚本中添加try相关代码:
方法一:参数校验失败时主动抛出错误
这是MATLAB里最规范的处理方式,当输入参数不满足条件时,直接用error函数抛出明确的错误信息,MATLAB会直接终止构造过程,不会生成任何空对象。
示例构造函数代码:
function obj = myClass(input1, input2) % 输入参数校验逻辑 if input1 < 0 || input2 > 100 error('myClass:InvalidInputs', '输入参数不合法:input1不能小于0,input2不能大于100'); end % 参数合法时初始化对象属性 obj.Property1 = input1; obj.Property2 = input2; end
当调用myObj = myClass(-1, 50);这类不合法参数时,MATLAB会直接抛出错误,不会给myObj赋值任何内容,自然也就不会生成空对象。
方法二:校验失败时返回空数组(不推荐但可实现无报错)
如果你不想触发报错,而是希望参数不合法时返回空值,可以在构造函数里直接返回空数组,替代类实例:
示例代码:
function obj = myClass(input1, input2) % 输入参数校验(假设validateMyInputs是你的自定义校验函数) if ~validateMyInputs(input1, input2) obj = []; return; end % 参数合法时初始化对象属性 obj.Property1 = input1; obj.Property2 = input2; end
这种情况下,调用不合法参数时,myObj会被赋值为空数组,而非属性为空的类对象。但这种方式会隐藏错误信息,调试时不容易定位问题,仅适合明确允许空返回的场景。
注意:你之前用clear obj的方式无法解决问题,因为MATLAB构造函数要求必须返回类实例(除非抛出异常),强行清除对象会导致输出不匹配,进而触发报错。
内容的提问来源于stack exchange,提问作者Holan
相关产品推荐
相关产品推荐

