Скрытие представителей перечисления позволяет авторам классов изменять имена представителей перечисления, не вызывая несовместимости в существующем коде. Чтобы скрыть представителей, создайте блок перечисления, который устанавливает 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
Поиск сведений о скрытых представителях перечисления с помощью метаданных классов. The 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
Чтобы перечислить имена всех скрытых представителей, используйте класс handle findobj метод:
findobj(mc.EnumerationMemberList,'Hidden',true).Nameans =
'red'
ans =
'green'
ans =
'blue'