意想不到的转换当使用属性类验证

2视图(30天)
当试图限制设置的值分配给属性通过使用类验证,我发现被分配的值而不是被转换而不是抛出一个错误。例如,在下面的类,我希望MATLAB抛出一个错误当试图分配一个负值Property1:
classdefClass1
属性
Property1uint32 {isNonNeg}= uint32 (0)
结束
结束
函数isNonNeg (val)
如果~ (isinteger (val) & & val > = 0)
错误(“Property1必须分配一个非负整数的值。”);
结束
结束
然而,下面的代码成功:
> > x = Class1 ();
> > x。Property1 = 5
x =
Class1属性:
Property1: 0

接受的答案

MathWorks支万博1manbetx持团队
根据文档:
MATLAB试图将值转换为指定的类型在运行验证器之前的功能。
这是意想不到的,如果用户想之前检查分配的价值转换。一个增强请求已提交解决这种行为。现在的解决方案是把类验证:
classdefClass1
属性
Property1{isNonNeg}= uint32 (0)
结束
结束
函数isNonNeg (val)
如果~ (isinteger (val) & & val > = 0)
错误(“Property1必须分配一个非负整数的值。”);
结束
结束
这种解决方案的缺点是你不能执行转换后手动运行验证器函数。
或者,你可以切换到创建一个属性的setter方法。注意,setter方法运行后验证您必须完全删除属性验证为了工作:
classdefClass1
属性
Property1
结束
方法
函数obj = set.Property1 (obj, val)
如果~ (isinteger (val) & & val > = 0)
错误(“Property1必须分配一个非负整数的值。”);
其他的
obj。Property1 = val;
结束
结束
结束
结束

更多的答案(0)

类别

找到更多的在属性帮助中心文件交换

s manbetx 845


释放

R2019b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!