Поиск значений по умолчанию в метаданных свойств

Значения по умолчанию

Определения классов могут задать явные значения по умолчанию для свойств (см. Значения свойства по умолчанию). Определите, задает ли класс явное значение по умолчанию для свойства и что значение значения по умолчанию из свойства meta.property объект.

данные 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® код.

Запрос значения по умолчанию

Процедура для запроса значения по умолчанию включает:

  1. Получение meta.property объект для свойства, значение по умолчанию которого вы хотите запросить.

  2. Тестирование логического значения meta.property HasDefault свойство определить, задает ли свойство значение по умолчанию. MATLAB возвращает ошибку, когда вы запрашиваете DefaultValue свойство, если класс не задает значение по умолчанию для свойства.

  3. Получение значения по умолчанию от 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 свойство. Включайте любую проверку ошибок, которая необходима для вашего приложения.

  1. Получите meta.class объект для класса:

    mc = ?MyDefs;

  2. Получите массив meta.property объекты от meta.class PropertyList свойство:

    mp = mc.PropertyList;
  3. Длина mp массив равняется количеству свойств. Можно использовать meta.property Name свойство найти свойство интересным:

    for k = 1:length(mp)
       if (strcmp(mp(k).Name,'Material')
          ...
  4. Прежде, чем запросить значение по умолчанию 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 =

    []

Похожие темы