exponenta event banner

См. перечисления

Экземпляры классов перечисления

Члены перечисления являются экземплярами класса перечисления. Можно назначить элементы перечисления переменным и сформировать массивы элементов перечисления. Если класс перечисления является производным от суперкласса, можно заменить элемент перечисления для экземпляра суперкласса.

WeekDays определяет элементы перечисления для пяти дней недели.

classdef WeekDays
   enumeration
      Monday, Tuesday, Wednesday, Thursday, Friday
   end
end

Создание объектов WeekDays класс, представляющий определенные дни.

today = WeekDays.Monday;
tomorrow = WeekDays.Tuesday;

Переменные today и tomorrow являются объектами WeekDays класс.

PPM класс определяет три элемента перечисления. Каждый элемент имеет связанное числовое значение, производное от суперкласса класса.

classdef PPM < double
   enumeration
      High (1000)
      Medium (100)
      Low (10)
   end
end

Назначение элемента перечисления переменной.

level = PPM.High;

При замене элементов перечисления экземплярами суперкласса MATLAB ® связывает элемент перечисления с суперклассом. Например, добавьте числовое значение к члену перечисления PPM класс.

levelNew = level + 100
levelNew =

        1100

Результат относится к классу double.

whos
  Name          Size            Bytes  Class    Attributes

  level         1x1               108  PPM                
  levelNew      1x1                 8  double  

Значения суперкласса можно заменить соответствующими элементами перечисления. Например, передайте одно из числовых значений, определенных в классе перечисления, в PPMSwitch функция.

function PPMSwitch(ppm)
   switch ppm
      case PPM.Low
         disp Low
      case PPM.Medium
         disp Medium
      case PPM.High
         disp High
   end
end
PPMSwitch(100)
Medium

Можно также использовать элемент перечисления непосредственно:

PPMSwitch(PPM.Medium)
Medium

Сведения об операциях, которые можно выполнять с экземплярами класса перечисления, см. в разделе Операции с перечислениями.

Преобразование символов в перечисления

Классы перечисления могут преобразовываться char векторы в элементы перечисления при char вектор представляет элемент перечисления, определенный классом. Это преобразование позволяет передать действительный char вектор или клеточный массив char векторы, когда ожидаются перечисления.

Использовать char вместо прямой ссылки на элемент перечисления, если требуется использовать простую символьную строку для указания элемента перечисления. Однако указание элемента перечисления непосредственно исключает преобразование из char в перечисление.

Классы перечисления предоставляют функцию конвертера с использованием синтаксиса конструктора.

today = WeekDays('Tuesday');

Потому что char вектор 'Tuesday' соответствует элементу перечисления WeekDays.Tuesday, Weekdays char способ может выполнять преобразование.

class(today)
ans =

WeekDays

Создание массива перечисления с помощью WeekDay конструктор класса и массив ячеек char векторы.

wd = WeekDays({'Monday','Wednesday','Friday'})
wd = 

    Monday       Wednesday    Friday 
class(wd)
ans =

WeekDays

Все char векторы в массиве ячеек должны соответствовать члену перечисления, определенному классом.

Принуждение char к Перечислениям

Коды MATLAB char векторы в члены перечисления, если доминирующим аргументом является перечисление. Поскольку определяемые пользователем классы доминируют над char класс, MATLAB пытается преобразовать char вектор к члену класса перечисления.

Создайте массив перечисления. Затем вставьте char вектор, представляющий элемент перечисления в массиве.

a = [WeekDays.Monday,WeekDays.Wednesday,WeekDays.Friday]
a = 

    Monday       Wednesday    Friday

Добавить char вектор к WeekDays массив.

a(end+1) = 'Tuesday'
a = 

    Monday       Wednesday    Friday       Tuesday

MATLAB согласовывает char вектор в WeekDays элемент перечисления.

class(a)
ans =

WeekDays

Заменить элементы перечисления для char Векторы

Можно использовать элементы перечисления вместо char векторы в случаях, когда функции требуют char векторы. Например, этот вызов sprintf ожидает a char вектор, обозначенный %s спецификатор формата.

sprintf('Today is %s',WeekDays.Friday)
ans =

Today is Friday

Автоматическое преобразование классов перечисления в char позволяет использовать элементы перечисления в данном случае.

Массивы перечисления

Создание массивов перечисления:

  • Конкатенация элементов перечисления с помощью []

  • Назначение элементов перечисления массиву с использованием индексированного назначения

Создание массива перечисления класса WeekDays путем объединения элементов перечисления:

wd = [WeekDays.Tuesday,WeekDays.Wednesday,WeekDays.Friday];

Создание массива перечисления класса WeekDays по индексированному назначению:

a(1) = WeekDays.Tuesday;
a(2) = WeekDays.Wednesday;
a(3) = WeekDays.Friday;

Смешанные члены перечисления и char Векторы

Можно объединить элементы перечисления и char векторы до тех пор, пока char вектор представляет элемент перечисления.

clear a
a = [WeekDays.Wednesday,'Friday'];
class(a)
ans =

WeekDays

Также можно назначить char вектор к массиву перечисления:

clear a
a(1) = WeekDays.Wednesday;
a(2) = 'Friday';
class(a)
ans =

WeekDays

Элемент перечисления по умолчанию

Элемент по умолчанию класса перечисления является первым элементом перечисления, определенным в блоке перечисления. Для WeekDays класс, элементом перечисления по умолчанию является WeekDays.Monday.

classdef WeekDays
   enumeration
      Monday, Tuesday, Wednesday, Thursday, Friday
   end
end

MATLAB позволяет назначать любой элемент массива, даже если переменная массива ранее не существовала. Для заполнения неназначенных элементов массива MATLAB использует элемент перечисления по умолчанию.

Например, присвойте значение элементу 5 массива, a:

clear a
a(5) = WeekDays.Tuesday;

MATLAB должен инициализировать значения элементов массива a(1:4) с элементом перечисления по умолчанию. Результат присвоения пятому элементу массива a является:

a
a = 

    Monday       Monday       Monday       Monday       Tuesday  

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