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

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

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

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  

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте