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

Разделение на подклассы встроенных типов

Классы перечисления могут разделить MATLAB® на подклассы встроенные классы. Получение класса перечисления от встроенных классов полезно, чтобы расширить полноценность участников перечисления.

  • Перечисления наследовали функциональность от встроенного класса.

  • Можно сопоставить числовое или логическое значение с участниками перечисления.

Для более основного обсуждения классов перечисления смотрите, Задают Классы Перечисления.

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

Примечание

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

Если класс перечисления разделяет встроенный числовой класс на подклассы, подкласс наследовал упорядоченное расположение и арифметические операции, что можно обратиться к перечислимым именам.

Например, Results класс разделяет на подклассы int32 встроенный класс. Этот класс сопоставляет целочисленное значение с каждым из четырех участников перечисления — Firstвторой, 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 передает входные параметры, сопоставленные с участниками перечисления к конструктору суперкласса. Например, ссылка на 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

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

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.

Похожие темы