主要内容

在属性元数据中查找默认值

默认值

类定义可以为属性指定显式的默认值(参见属性默认值)。确定类是否为属性定义了显式的默认值,以及默认值来自该属性meta.property对象。

meta.propertyData

meta.class类的meta.property对象,用于类定义的每个属性,包括具有私有访问和受保护访问的属性。

例如,得到meta.class对象的PropertyWithDefault类所示:

classdefPropertyWithDefault属性Date = Date RandNumber = randi(9)结束结束

获取meta.property对象的meta.class对象:

mc = ? PropertyWithDefault;% meta.class对象议员= mc.PropertyList;%元。属性数组

的第二个元素国会议员数组是meta.property对象的RandNumber财产。清单的meta.property对象显示其属性中包含的信息:

议员(2)
属性:Name: 'RandNumber' Description: " DetailedDescription: " GetAccess: 'public' SetAccess: 'public' Dependent: 0 Constant: 0 Abstract: 0 Transient: 0 Hidden: 0 getobserable: 0 setobserable: 0 AbortSet: 0 NonCopyable: 0 GetMethod: [] SetMethod: []HasDefault: 1DefaultValue: 5DefiningClass(1×1 meta.class):

列出的两个meta.property属性提供关于默认值的信息:

  • HasDefault- - - - - -真正的(显示为1),如果类指定属性的默认值,如果没有。

  • DefaultValue-当类为属性定义默认值时,包含默认值。如果默认值是表达式,则为DefaultValue是计算表达式的结果。

有关表达式定义的属性默认值的计算的更多信息,请参见类定义中表达式的求值

这些属性提供了一种编程方式,无需打开类定义文件即可获得属性默认值。使用这些meta.property对象属性获取内置类和MATLAB中定义的类的属性默认值®代码。

查询默认值

查询默认值的过程包括:

  1. 得到了meta.property要查询其默认值的属性的。

  2. 的逻辑值测试meta.propertyHasDefault属性确定该属性是否定义默认值。当您查询时,MATLAB返回一个错误DefaultValue属性,如果类没有为该属性定义默认值。

  3. 中获取默认值meta.propertyDefaultValue财产,如果HasDefault值是真正的

使用操作符,元类函数,或meta.class.fromName静态方法(与字符向量变量),得到ameta.class对象。

meta.class对象PropertyList包含meta.property对象。确定哪个属性对应于哪个属性meta.property对象使用meta.property的名字财产。

例如,这个类用默认值定义属性:

classdefMyDefs属性材料=“丙烯酸”InitialValue = 1.0结束结束

属性的默认值,请执行以下步骤材料财产。包括应用程序所需的任何错误检查。

  1. 得到了meta.class类的对象:

    mc = ? MyDefs;

  2. 获取meta.property对象的meta.classPropertyList属性:

    议员= mc.PropertyList;
  3. 长度国会议员数组等于属性的数量。你可以使用meta.property的名字寻找财产利益的财产:

    k = 1:长度(mp)如果(比较字符串(mp (k)。的名字,“材料”...
  4. 查询的默认值材料属性,测试HasDefaultmeta.property来确定MyClass定义此属性的默认属性:

    如果mp (k)。HasDefault dv = mp(k).DefaultValue;结束

DefaultValue属性是只读的。更改类定义中的默认值将更改DefaultValue财产。无论属性的访问设置如何,都可以查询属性的默认值。

抽象属性和动态属性不能定义默认值。因此,如果您试图查询这些属性的默认值,MATLAB将返回一个错误。始终测试的逻辑值meta.propertyHasDefault属性,然后查询DefaultValue属性以避免生成错误。

默认值定义为表达式

类定义可以将属性默认值定义为MATLAB表达式(参见类定义中表达式的求值的更多信息)。MATLAB会在第一次需要默认值时计算这些表达式,比如第一次创建类的实例时。

查询meta.propertyDefaultValue属性导致MATLAB计算尚未计算的默认值表达式。因此,如果在MATLAB计算表达式时出现错误或警告,查询属性默认值可以返回一个错误或警告。看到属性的表达式错误了一个例子。

属性没有显式默认值

MyClass没有明确定义?的默认值喷火属性:

classdefMyFoo属性喷火结束结束

meta.property实例属性喷火值为HasDefault.因为类没有显式定义的默认值喷火,试图访问DefaultValue属性导致错误:

mc = ? MyFoo;议员= mc.PropertyList (1);mp。HasDefault
ans = 0
dv = mp.DefaultValue;
没有为属性Foo定义默认值

抽象的属性

MyClass定义了喷火财产摘要

classdefMyAbst属性Foo(抽象)结束结束

meta.property实例属性喷火值为为其HasDefault属性的默认值,因为无法定义摘要财产。试图访问DefaultValue会导致一个错误:

mc = ? MyAbst;议员= mc.PropertyList (1);mp。HasDefault
ans = 0
dv = mp.DefaultValue;
属性Foo是抽象的,因此不能有默认值。

属性的表达式错误

MyPropEr定义了喷火属性默认值作为在计算时出错的表达式。

classdefMyPropEr属性Foo =罪(馅饼/ 2)结束结束

meta.property对象的属性喷火值为真正的为其HasDefault财产,因为喷火有一个默认值:

罪(馅饼/ 2)

然而,该表达式返回一个错误(是创建饼图的函数而不是值吗π)。

mc = ? MyPropEr;议员= mc.PropertyList (1);mp。HasDefault
ans = 1
dv = mp.DefaultValue;
使用pie出错(第29行)输入参数不足。

查询默认值会导致表达式的计算并返回错误。

显式定义默认值为空的属性

MyEmptyProp指定默认值为[](空双)到喷火属性:

classdefMyEmptyProp属性Foo = []结束结束

meta.property对象的属性喷火它的值为真HasDefault财产。访问DefaultValue返回的值[]

mc = ? MyEmptyProp;议员= mc.PropertyList (1);mp。HasDefault
ans = 1
dv = mp.DefaultValue;
dv = []

相关的话题