exponenta event banner

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

Подкласс встроенных классов

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

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

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.

Связанные темы