Скрытие членов перечисления позволяет авторам классов изменять имена членов перечисления, не вызывая несовместимости в существующем коде. Чтобы скрыть элементы, создайте блок перечисления, который задает Hidden атрибут. Элементы, определенные в Hidden блоки перечисления не видны при запросе элементов перечисления с помощью enumeration функция.
Если класс перечисления является производным от другого класса, такого как числовой или логический класс, то каждый член может иметь связанное с ним значение. Если двум членам назначено одинаковое значение, то элемент, определенный первым в определении класса, маскирует второй элемент. Оба имени являются допустимыми элементами перечисления, но первый определенный элемент является основным. Хотя маскирование позволяет использовать одно имя члена вместо другого, оно не скрывает вторичное имя от пользователей класса.
Использование Hidden удаляет маскированные имена элементов из представления пользователя. Например, HighlightColor определяет элементы перечисления, представляющие цвета выделения синтаксиса.
classdef HighlightColor < int32 enumeration red (1) green (2) blue (3) end end
Новая версия класса использует более описательные имена членов, но класс должен избегать разрыва существующего кода, в котором используются исходные имена членов, красные, зеленые и синие. Использование Hidden атрибут для элементов перечисления позволяет классу скрывать исходные элементы.
classdef HighlightColor < int32 enumeration error (1) comment (2) keyword (3) end enumeration (Hidden) red (1) green (2) blue (3) end end
Код, использующий исходные имена участников, продолжает работать. Например, существующие ссылки на скрытый элемент HighlightColor.blue совместим с нескрытым членом с одинаковым значением HighlightColor.keyword.
%
a = HighlightColor.bluea =
HighlightColor enumeration
keyword
a == HighlightColor.Keyword
ans = logical 1
Для элементов перечисления, представляющих значения, первый элемент, определенный в классе, является основным элементом для этого значения. Например, в HighlightColor класс, keyword является основным членом и blue является вторичным элементом, оба представляют значение 3. Как правило, первичный элемент не скрывается, в то время как вторичный элемент скрывается. Однако если конструкция класса требует, чтобы основной элемент был скрыт, то вторичный элемент также должен быть скрыт.
Чистые элементы перечисления не имеют базовых значений, поэтому невозможно идентифицировать один элемент как замену другому. Тем не менее, вы можете использовать Hidden , чтобы удалить элемент из представления пользователя, избегая несовместимости с существующими видами использования скрытого элемента.
Например, PCComponents класс определяет перечисления, используемые в интерактивной форме для заказа компьютера. Пока FloppyDrive компонент устарел, элемент перечисления может оставаться в классе как скрытый элемент. Форма может быть исключена FloppyDrive из списка вариантов, но автор класса может оставить этот член доступным, чтобы существующие формы, которые ссылаются на FloppyDrive все еще действительны.
classdef PCComponents enumeration USBSlots CDPlayer end enumeration (Hidden) FloppyDrive end end
Поиск сведений о скрытых членах перечисления с помощью метаданных класса. meta.EnumeratedValue содержит информацию об элементах перечисления. Например, доступ к метаданным для HighlightColor класс, используемый в предыдущих примерах, может отображать имена скрытых членов.
mc =?HighlightColor
mc =
class with properties:
Name: 'HighlightColor'
Description: ''
DetailedDescription: ''
Hidden: 0
Sealed: 0
Abstract: 0
Enumeration: 1
ConstructOnLoad: 0
HandleCompatible: 0
InferiorClasses: {[1×1 meta.class]}
ContainingPackage: [0×0 meta.package]
RestrictsSubclassing: 0
PropertyList: [0×1 meta.property]
MethodList: [140×1 meta.method]
EventList: [0×1 meta.event]
EnumerationMemberList: [6×1 meta.EnumeratedValue]
SuperclassList: [1×1 meta.class]Каждый элемент перечисления описывается meta.EnumeratedValue объект, который содержится в EnumerationMemberList собственность. Например, четвертый элемент в EnumerationMemberList массив содержит meta.EnumerationValue объект для элемента с именем red.
mc.EnumerationMemberList(4)
ans =
EnumeratedValue with properties:
Name: 'red'
Description: ''
DetailedDescription: ''
Hidden: 1
Чтобы перечислить имена всех скрытых элементов, используйте класс дескриптора findobj способ:
findobj(mc.EnumerationMemberList,'Hidden',true).Nameans =
'red'
ans =
'green'
ans =
'blue'