Определения классов могут задать явные значения по умолчанию для свойств (см. Значения свойства по умолчанию). Определите, задает ли класс явное значение по умолчанию для свойства и что значение значения по умолчанию от объекта свойства meta.property
.
Объект meta.class
для класса содержит объект meta.property
для каждого свойства, заданного классом, включая свойства с частным и защищенным доступом.
Например, получите объект meta.class
для класса PropertyWithDefault
, показанного здесь:
classdef PropertyWithDefault properties Date = date RandNumber = randi(9) end end
Получите массив объектов meta.property
от объекта meta.class
:
mc = ?PropertyWithDefault; % meta.class object mp = mc.PropertyList; % meta.property array
Второй элемент в массиве mp
является объектом meta.property
для свойства RandNumber
. Листинг объекта meta.property
показывает информацию, содержавшуюся в ее свойствах:
mp(2)
property with properties: Name: 'RandNumber' Description: '' DetailedDescription: '' GetAccess: 'public' SetAccess: 'public' Dependent: 0 Constant: 0 Abstract: 0 Transient: 0 Hidden: 0 GetObservable: 0 SetObservable: 0 AbortSet: 0 NonCopyable: 0 GetMethod: [] SetMethod: [] HasDefault: 1 DefaultValue: 5 DefiningClass: [1×1 meta.class]
Два из перечисленных свойств meta.property
предоставляют информацию о значениях по умолчанию:
HasDefault
— true
(отображенный как 1), если класс задает значение по умолчанию для свойства, false
, если это не делает.
DefaultValue
— Содержит значение по умолчанию, когда класс задает значение по умолчанию для свойства. Если значение по умолчанию является выражением, значение DefaultValue
является результатом выполнения выражения.
Для получения дополнительной информации об оценке значений свойства по умолчанию, заданных выражениями, смотрите Оценку Выражений в Определениях классов.
Эти свойства обеспечивают программируемый способ получить значения свойства по умолчанию, не открывая файлы определения класса. Используйте эти свойства объектов meta.property
, чтобы получить значения свойства по умолчанию и для встроенных классов и для классов, заданных в коде MATLAB®.
Процедура для запроса значения по умолчанию включает:
Получение объекта meta.property
для свойства, значение по умолчанию которого вы хотите запросить.
Тестирование логического значения свойства meta.property
HasDefault
определить, задает ли свойство значение по умолчанию. MATLAB возвращает ошибку, когда вы запрашиваете свойство DefaultValue
, если класс не задает значение по умолчанию для свойства.
Получение значения по умолчанию из свойства meta.property
DefaultValue
, если значением HasDefault
является true
.
Используйте оператор ?
, функция metaclass
или статический метод meta.class.fromName
(работает с переменной вектора char
) получить объект meta.class
.
Объект meta.class
PropertyList
содержит массив объектов meta.property
. Идентифицируйте, которому свойство соответствует который объект meta.property
с помощью
свойства meta.property
Name
.
Например, этот класс задает свойства со значениями по умолчанию:
classdef MyDefs properties Material = 'acrylic' InitialValue = 1.0 end end
Выполните эти шаги, чтобы получить значение по умолчанию, заданное для свойства Material
. Включайте любую проверку ошибок, которая необходима для вашего приложения.
Получите объект meta.class
для класса:
mc = ?MyDefs;
Получите массив объектов meta.property
из свойства meta.class
PropertyList
:
mp = mc.PropertyList;
Длина массива mp
равняется количеству свойств. Можно использовать свойство meta.property
Name
найти свойство интересным:
for k = 1:length(mp) if (strcmp(mp(k).Name,'Material') ...
Прежде, чем запросить значение по умолчанию свойства Material
, протестируйте meta.property
HasDefault
, чтобы определить, задает ли MyClass
свойство по умолчанию для этого свойства:
if mp(k).HasDefault dv = mp(k).DefaultValue; end
Свойство DefaultValue
только для чтения. Изменение значения по умолчанию в определении класса изменяет значение свойства DefaultValue
. Можно запросить значение по умолчанию свойства независимо от его настроек доступа.
Абстрактные и динамические свойства не могут задать значения по умолчанию. Поэтому MATLAB возвращает ошибку, при попытке запросить значение по умолчанию свойств с этими атрибутами. Всегда тестируйте логическое значение свойства meta.property
HasDefault
прежде, чем запросить свойство DefaultValue
постараться не генерировать ошибку.
Определения классов могут задать значения свойства по умолчанию как выражения MATLAB (см. Оценку Выражений в Определениях классов для получения дополнительной информации). MATLAB выполняет эти выражения в первый раз, когда значение по умолчанию необходимо, такие как первый раз, когда вы создаете экземпляр класса.
Запрос свойства meta.property
DefaultValue
заставляет MATLAB выполнять выражение значения по умолчанию, если это еще не было оценено. Поэтому запрос значения свойства по умолчанию может возвратить ошибку или предупреждение, если ошибки или предупреждения происходят, когда MATLAB выполняет выражение. Смотрите Свойство с Выражением Что Ошибки для примера.
MyClass
явным образом не задает значение по умолчанию для свойства Foo
:
classdef MyFoo properties Foo end end
Экземпляр meta.property
для свойства Foo
имеет значение false
для HasDefault
. Поскольку класс явным образом не задает значение по умолчанию для Foo
, пытание получить доступ к свойству DefaultValue
вызывает ошибку:
mc = ?MyFoo; mp = mc.PropertyList(1); mp.HasDefault
ans = 0
dv = mp.DefaultValue;
No default value has been defined for property Foo
MyClass
задает свойство Foo
как Abstract
:
classdef MyAbst properties (Abstract) Foo end end
Экземпляр meta.property
для свойства Foo
имеет значение false
для его свойства HasDefault
, потому что вы не можете задать значение по умолчанию для свойства Abstract
. Попытка получить доступ к DefaultValue
вызывает ошибку:
mc = ?MyAbst; mp = mc.PropertyList(1); mp.HasDefault
ans = 0
dv = mp.DefaultValue;
Property Foo is abstract and therefore cannot have a default value.
MyPropEr
задает значение свойства по умолчанию Foo
как выражение это ошибки, когда оценено.
classdef MyPropEr properties Foo = sin(pie/2) end end
Объект meta.property
для свойства Foo
имеет значение true
для его свойства HasDefault
, потому что Foo
действительно имеет значение по умолчанию:
sin(pie/2)
Однако это выражение возвращает ошибку (pie
является функцией, которая создает круговую диаграмму, не значение pi
).
mc = ?MyPropEr; mp = mc.PropertyList(1); mp.HasDefault
ans = 1
dv = mp.DefaultValue;
Error using pie (line 29)
Not enough input arguments.
Запрос значения по умолчанию вызывает оценку выражения и возвращает ошибку.
MyEmptyProp
присваивает значение по умолчанию []
(пустой двойной) к свойству Foo
:
classdef MyEmptyProp properties Foo = [] end end
Объект meta.property
для свойства Foo
имеет значение истины для его свойства HasDefault
. Доступ к DefaultValue
возвращает значение []
:
mc = ?MyEmptyProp; mp = mc.PropertyList(1); mp.HasDefault
ans = 1
dv = mp.DefaultValue;
dv = []