Определения классов могут задать явные значения по умолчанию для свойств (см. Значения свойства по умолчанию). Определите, задает ли класс явное значение по умолчанию для свойства и что значение значения по умолчанию из свойства meta.property
объект.
meta.class
объект для класса содержит a 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
свойство, протестируйте HasDefault
meta.property
определить если 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 = []