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

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

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

данные 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 предоставляют информацию о значениях по умолчанию:

  • HasDefaulttrue (отображенный как 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, протестируйте 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 =

    []

Похожие темы

Была ли эта тема полезной?