Определения классов могут задавать явные значения по умолчанию для свойств (см. раздел Значения по умолчанию для свойств). Определите, определяет ли класс явное значение по умолчанию для свойства и какое значение по умолчанию берется из свойства 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 свойство, протестируйте 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 FooMyClass определяет 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 =
0dv = 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 имеет значение true для HasDefault собственность. Доступ DefaultValue возвращает значение []:
mc = ?MyEmptyProp; mp = mc.PropertyList(1); mp.HasDefault
ans =
1
dv = mp.DefaultValue;
dv =
[]