Полученные перечисления из встроенных классов

Встроенные классы подклассирования

Классы перечисления могут подклассифицировать 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

Создание образцов перечисления

Когда вы впервые ссылаетесь на класс перечисления, который получают из встроенного класса, такого как, int32MATLAB передает входные параметры, связанные с представителями перечисления, конструктору суперкласса. Для примера, ссылка на Second Results представитель, определяемый как:

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

Как подклассифицировать числовые встроенные классы

The 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.

Похожие темы