MATLAB®属性使您能够验证特定属性值的限制。您可以使用验证限制类和属性值的大小。此外,您可以使用函数来建立属性值必须符合标准。MATLAB定义了一组验证功能,您可以编写自己的验证功能。
使用属性在类定义中验证是可选的。
下面的代码显示了中突出显示的区域属性的语法验证。
属性验证包括:
大小,每个维度的长度指定为一个正整数或冒号。一个冒号表明任何尺寸的长度是允许的。分配给该属性的值必须符合指定的大小或符合指定的大小。有关更多信息,请参见财产规模验证。
一个MATLAB类的类的名称。分配给该属性的值必须是指定类的或可兑换指定的类。使用MATLAB类或外部定义的类,由MATLAB支持,除了Java万博1manbetx®和COM类。有关更多信息,请参见房地产类验证。
函数——一个以逗号分隔的验证函数名。MATLAB将分配给属性的值传递给每个验证函数在应用任何可能的类和大小转换。如果验证失败,验证器函数抛出错误但不返回值。有关更多信息,请参见属性验证功能。
MATLAB验证函数的列表,请参阅MATLAB验证功能。
的ValidateProps
类定义了三个属性与验证。
classdefValidateProps属性位置(1、3)双{mustBeReal, mustBeFinite}标签(:1)字符{mustBeMember(标签,{‘高’,‘中等’,‘低’})}=“低”状态(1,1)matlab.lang.OnOffSwitchState结束结束
位置
必须是一个数组1×3的课吗双
其值是真实的,有限的数字。
标签
必须是一个字符
向量是“高”
,“媒介”
,或“低”
。
状态
必须是一个枚举的成员吗matlab.lang.OnOffSwitchState
类(从
或在
)。
创建一个对象ValidateProps
类对隐式和显式执行验证默认值:
一个= ValidateProps
a = ValidateProps属性:位置:[0 0 0]标签:“低”状态:
在创建对象时,MATLAB:
初始化位置
属性值对(0 0 0)
满足的大小和类需求。
设置标签
属性默认值,“低”
。默认值必须允许的值集的成员。空字符
隐式的默认值将导致一个错误。
设置状态
财产从
枚举成员定义的matlab.lang.OnOffSwitchState
类。
MATLAB选择默认值的信息,请参阅每个大小和类的默认值。
分配一个值时,房地产,包括在类定义中指定的默认值,MATLAB在这个订单执行验证:
的ValueProp
类使用大小、类和功能验证,以确保一个作业价值
属性是一个双标量这并不是负面的。
classdefValueProp属性值(1,1)双{mustBeNonnegative} = 0结束结束
这个声明试图单元阵列分配给属性。这类作业违反了验证。
一个。值= {10 20};
错误设定属性的“价值”类“ValueProp”:无效的数据类型。值必须是双或可转换双。
这个声明试图1×2双数组分配给属性。这个任务违反了尺寸验证。
一个。值= 20 [10];
错误设定属性的“价值”类“ValueProp”:必须标量值的大小。
这个声明试图分配一个标量双重属性。这个任务失败的功能验证,这就需要一个非负数字。
一个。值= -10;
错误设置属性的“价值”类“ValueProp”:值必须是负的。
验证过程结束时,遇到的第一个错误。
您可以定义属性验证抽象的属性。验证适用于所有子类实现财产。然而,子类不能使用任何验证实施的产权。验证属性的多个类继承时,只有一个抽象的属性在一个超类可以定义验证。所有的抽象超类可以定义属性。
如果你改变类的对象属性验证而存在,MATLAB不会尝试应用新的验证现有的属性值。然而,MATLAB应用新验证当你做作业的现有对象的属性。
当一个对象保存到垫
MATLAB文件,保存所有的默认属性值的对象。当加载对象,MATLAB恢复这些属性值在新创建的对象。
如果类定义更改属性验证,加载属性值不再有效,MATLAB替代当前定义默认的属性值。然而,负载
功能抑制的验证错误发生之前分配默认值从当前的类定义。因此,验证错误时默默地忽略负载操作。
为了说明这种行为,这个例子创建,保存和加载的对象MonthTemp
类。这类限制AveTemp
产权单元阵列。
classdefMonthTemp属性AveTemp细胞结束结束
创建一个MonthTemp
对象和赋值AveTemp
财产。
一个= MonthTemp;一个。AveTemp = {“可能”70};
保存对象使用保存
。
保存TemperatureFile一个
编辑属性定义更改的验证类AveTemp
房地产从单元阵列containers.Map
。
classdefMonthTemp属性AveTemp containers.Map结束结束
加载已保存的对象与新的类定义在MATLAB的道路。MATLAB不能分配保存的价值AveTemp
房地产由于单元阵列,{‘可能’,70}
不兼容属性值是一个当前的要求containers.Map
对象。MATLAB不能单元阵列转换为containers.Map
。
解决不相容,MATLAB设置AveTemp
属性加载对象的当前的默认值,这是一个空的containers.Map
对象。
负载TemperatureFile一个一个。AveTemp ans =地图与属性:数:0 KeyType: char ValueType:任何
加载对象分配给有不同的价值AveTemp
财产因为现在保存的值是无效的。然而,加载过程中抑制验证错误。
防止数据丢失时改变类定义和重新加载对象,实现一个loadobj
方法或类转换方法,使保存的值,以满足当前属性的有效性。
保存和加载对象的更多信息,看一下保存和加载过程对象。