Создайте класс перечисления путем добавления enumeration блокируйтесь к определению класса. Например, WeekDays класс перечисляет набор дней недели.
classdef WeekDays enumeration Monday, Tuesday, Wednesday, Thursday, Friday end end
Выполнить MATLAB® код в следующих разделах, поместите WeekDays определение класса в .m файл на вашем пути.
Обратитесь к члену перечисления, использующему имя класса и имя элемента:
ClassName.MemberName
Например, присвойте член перечисления WeekDays.Tuesday к переменной today:
today = WeekDays.Tuesday;
today переменная класса WeekDays:
whos
Name Size Bytes Class Attributes today 1x1 104 WeekDays
today
today =
TuesdayЕсли класс перечисления задает суперкласс, можно преобразовать объект перечисления в суперкласс путем передачи объекта конструктору суперкласса. Однако конструктор суперкласса должен смочь принять свой собственный класс, как введено и возвратить экземпляр суперкласса. MATLAB встроенные числовые классы, такие как uint32, позвольте это преобразование.
Например, Bearing класс выводит из uint32 встроенный класс:
classdef Bearing < uint32 enumeration North (0) East (90) South (180) West (270) end end
Присвойте Bearing.East член к переменной a:
a = Bearing.East;
Передайте a к конструктору суперкласса и возвращают uint32 значение:
b = uint32(a); whos
Name Size Bytes Class Attributes a 1x1 4 Bearing b 1x1 4 uint32
uint32 конструктор принимает объект подкласса Bearing и возвращает объект класса uint32.
Задайте методы в классе перечисления как любой класс MATLAB. Например, задайте метод под названием isMeetingDay для WeekDays класс перечисления. Вариант использования - то, что у пользователя есть повторение, встречающееся по вторникам. Метод проверяет, является ли входной параметр экземпляром WeekDays член Tuesday.
classdef WeekDays enumeration Monday, Tuesday, Wednesday, Thursday, Friday end methods function tf = isMeetingDay(obj) tf = WeekDays.Tuesday == obj; end end end
Вызовите isMeetingDay с экземпляром WeekDays класс:
today = WeekDays.Tuesday; today.isMeetingDay
ans =
1Можно также использовать член перечисления в качестве прямого входа к методу:
isMeetingDay(WeekDays.Wednesday)
ans =
0Добавьте свойства в класс перечисления, когда необходимо будет хранить данные, связанные с членами перечисления. Установите значения свойств в конструкторе класса. Например, SyntaxColors класс задает три свойства. Конструктор класса присваивает значения входных параметров к соответствующим свойствам, когда вы ссылаетесь на член класса.
classdef SyntaxColors properties R G B end methods function c = SyntaxColors(r, g, b) c.R = r; c.G = g; c.B = b; end end enumeration Error (1, 0, 0) Comment (0, 1, 0) Keyword (0, 0, 1) String (1, 0, 1) end end
Когда вы обращаетесь к члену перечисления, конструктор инициализирует значения свойств:
e = SyntaxColors.Error; e.R
ans =
1Поскольку SyntaxColors класс значения (он не выводит из handle), только конструктор класса может установить значения свойств:
e.R = 0
You cannot set the read-only property 'R' of SyntaxColors.Для получения дополнительной информации о классах перечисления, которые задают свойства, смотрите Изменяемый Указатель по сравнению с Неизменяемыми членами Перечисления Значения.
Каждый оператор в блоке перечисления является именем члена перечисления, опционально сопровождаемого списком аргументов. Если класс перечисления задает конструктора, MATLAB вызывает конструктора, чтобы создать перечислимые экземпляры.
MATLAB предоставляет конструктора по умолчанию для всех классов перечисления, которые явным образом не задают конструктора. Конструктор по умолчанию создает экземпляр класса перечисления:
Используя никакие входные параметры, если член перечисления не задает входных параметров
Используя входные параметры, заданные в классе перечисления для того члена
Например, входные параметры для Bool классом является 0 для Bool.No и 1 для Bool.Yes.
classdef Bool < logical enumeration No (0) Yes (1) end end
Значения 0 и 1 имеют класс logical потому что конструктор по умолчанию передает аргумент первому суперклассу. Таким образом, этот оператор:
n = Bool.No;
Результаты в вызове logical это эквивалентно следующему оператору в конструкторе:
function obj = Bool(val) obj@logical(val) end
MATLAB передает аргумент члена только первому суперклассу. Например, предположите Bool выведенный из другого класса:
classdef Bool < logical & MyBool enumeration No (0) Yes (1) end end
MyBool класс может добавить некоторое специализированное поведение:
classdef MyBool methods function boolValues = testBools(obj) ... end end end
Bool по умолчанию конструктор ведет себя как будто заданный как эта функция:
Аргумент передал первому конструктору суперкласса
Никакие аргументы не передали последующим конструкторам
function obj = Bool(val) obj@logical(val) obj@MyBool end