Определения классов могут задавать явные значения по умолчанию для свойств (см. «Значения свойства по умолчанию»). Определите, задает ли класс явное значение по умолчанию для свойства и каково значение по умолчанию от свойства 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
объект.
The 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
The DefaultValue
свойство доступно только для чтения. Изменение значения по умолчанию в определении класса изменяет значение DefaultValue
свойство. Вы можете запросить значение по умолчанию свойства независимо от его параметров доступа.
Абстрактные и динамические свойства не могут задать значения по умолчанию. Поэтому MATLAB возвращает ошибку, если вы пытаетесь запросить значение по умолчанию свойств с этими атрибутами. Всегда проверяйте логическое значение meta.property
HasDefault
свойство перед запросом DefaultValue
свойство, чтобы избежать генерации ошибки.
Определения классов могут определять значения свойства по умолчанию как выражения MATLAB (для получения дополнительной информации см. «Оценка выражений в определениях классов»). MATLAB оценивает эти выражения при первой необходимости использования значения по умолчанию, например при первом создании образца класса.
Запрос meta.property
DefaultValue
свойство заставляет MATLAB вычислить выражение значения по умолчанию, если оно еще не было оценено. Поэтому запрос значения свойства по умолчанию может вернуть ошибку или предупреждение, если при оценке выражения MATLAB происходят ошибки или предупреждения. Смотрите Свойство с выражением, которое Ошибки для примера.
MyClass
не задает явно значение по умолчанию для Foo
свойство:
classdef MyFoo properties Foo end end
The 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
The 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
The 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
The meta.property
объект для Foo
свойств имеет значение true для своего
HasDefault
свойство. Доступ к DefaultValue
возвращает значение []
:
mc = ?MyEmptyProp; mp = mc.PropertyList(1); mp.HasDefault
ans = 1
dv = mp.DefaultValue;
dv = []