Обращение к перечислениям

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

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

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 ожидает 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  

Похожие темы