Скрытие представителей перечисления позволяет авторам классов изменять имена представителей перечисления, не вызывая несовместимости в существующем коде. Чтобы скрыть представителей, создайте блок перечисления, который устанавливает 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.blue
a = 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).Name
ans = 'red' ans = 'green' ans = 'blue'