Создайте класс перечисления путем добавления 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 60 Bearing b 1x1 4 uint32
The 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.
Для получения дополнительной информации о классах перечисления, которые задают свойства, см. Mutable Handle vs. Immutable Value Enumeration Members.
Каждый оператор в блоке перечисления является именем представителя перечисления, за которым необязательно следует список аргументов. Если класс перечисления задает конструктор, 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
The MyBool
класс может добавить некоторые специализированные поведения:
classdef MyBool methods function boolValues = testBools(obj) ... end end end
Значение по умолчанию Bool
конструктор ведет себя так, как будто задана эта функция:
Аргумент передан первому конструктору суперкласса
Последующие конструкторы не передали никаких аргументов
function obj = Bool(val) obj@logical(val) obj@MyBool end