Классы перечисления могут разделить MATLAB® на подклассы встроенные классы. Получение класса перечисления от встроенные классы полезно, чтобы расширить полноценность участников перечисления.
Перечисление наследовало функциональность от встроенного класса.
Можно сопоставить числовое или логическое значение с участниками перечисления.
Для более основного обсуждения классов перечисления смотрите, Задают Классы Перечисления.
Классы перечисления, выведенные от встроенных числовых и логических классов, не могут задать свойства.
Если класс перечисления разделяет встроенный числовой класс на подклассы, подкласс наследовал упорядоченное расположение и арифметические операции, что можно обратиться к перечислимым именам.
Например, класс Results
разделяет на подклассы int32
встроенный класс. Этот класс сопоставляет целочисленное значение с каждым из четырех участников перечисления — First
, Second
, Third
и NoPoints
.
classdef Results < int32 enumeration First (100) Second (50) Third (10) NoPlace (0) end end
Участник перечисления наследовал методы класса int32
(кроме оператора двоеточия). Используйте эти перечисления как числовые значения (суммированный, отсортированный, усредненный).
isa(Results.Second,'int32')
ans = 1
Например, используйте имена перечисления вместо чисел, чтобы оценить две команды:
Team1 = [Results.First, Results.NoPlace, Results.Third, Results.Second]; Team2 = [Results.Second, Results.Third, Results.First, Results.First];
Выполните операции int32
на этих перечислениях Results
:
sum(Team1)
ans = 160
mean(Team1)
ans = 40
sort(Team2,'descend')
ans = First First Second Third
Team1 > Team2
ans = 1 0 0 0
sum(Team1) < sum(Team2)
ans = 1
Когда вы сначала обращаетесь к классу перечисления, который выводит от встроенного класса такой как, int32
, MATLAB передает входные параметры, сопоставленные с участниками перечисления к конструктору суперкласса. Например, ссылаясь на участника Results
Second
, заданного как:
Second (50)
средние значения, которые вызывает MATLAB:
int32(50)
инициализировать аспект int32
этого объекта Results
.
Классы перечисления, которые выводят от MATLAB встроенные числовые и логические классы, могут задать больше чем одно имя для базового значения. Имя в блоке перечисления с данным базовым значением является подлинным именем для того базового значения, и последующие имена являются псевдонимами.
Задайте искаженные имена с тем же аргументом конструктора суперкласса как подлинное имя:
classdef Bool < logical enumeration No (0) Yes (1) off (0) on (1) end end
Например, подлинным именем экземпляра участника перечисления Bool.off
является No
:
a = Bool.No
a = No
b = Bool.off
b = No
Фактическое базовое значение, сопоставленное с участником перечисления, является значением, возвращенным встроенным суперклассом. Например, считайте класс Bool
заданным с аргументами конструктора, которые имеют класс double
:
classdef Bool < logical enumeration No (0) Yes (100) end end
Этот класс выводит от встроенного класса logical
. Поэтому базовые значения для участника перечисления зависят только, на каком значении logical
возвращается, когда передано что значение:
a = Bool.Yes
a = Yes
logical(a)
ans = 1
Класс перечисления FlowRate
задает трех участников, Low
, Medium
и High
.
classdef FlowRate < int32 enumeration Low (10) Medium (50) High (100) end end
Сошлитесь на экземпляр участника перечисления:
setFlow = FlowRate.Medium;
Этот оператор заставляет MATLAB вызывать конструктора по умолчанию со значением аргумента 50
. MATLAB передает этот аргумент первому конструктору суперкласса (int32(50)
в этом случае). Результатом является базовое значение 50
как 32-битное целое число для участника FlowRate.Medium
.
Поскольку FlowRate
разделяет встроенный числовой класс на подклассы (int32
), этот класс не может задать свойства. Однако, FlowRate
наследовал методы int32
включая метод конвертера. Программы могут использовать конвертер, чтобы получить базовое значение:
setFlow = FlowRate.Medium; int32(setFlow)
ans = 50
Если перечисление является подклассом встроенного числового класса, можно преобразовать от встроенных числовых данных до перечисления с помощью имени класса перечисления. Например:
a = Bool(1)
a = Yes
Перечислимый класс также принимает участников перечисления своего собственного класса как входные параметры:
Bool(a)
ans = Yes
Конвертер возвращает объект, одного размера как во входном параметре:
Bool([0,1])
ans = No Yes
Создайте пустой массив перечисления с помощью статического метода empty
:
Bool.empty
ans = 0x0 empty Boolean enumeration.