Main Content

列挙型の参照

列挙クラスのインスタンス

列挙メンバーは列挙クラスのインスタンスです。列挙メンバーを変数に代入して、列挙メンバーの配列を構成できます。列挙クラスがスーパークラスから派生する場合、列挙メンバーをスーパークラスのインスタンスに置き換えることができます。

WeekDays クラスは週の 5 日の列挙メンバーを定義します。

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

特定の日を表す WeekDays クラスのオブジェクトを作成します。

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

変数 today と変数 tomorrowWeekDays クラスのオブジェクトです。

PPM クラスは 3 つの列挙メンバーを定義します。各メンバーは、クラスのスーパークラスから派生した関連数値をもちます。

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 ベクトルの cell 配列を渡すことができます。

単純な文字列を使用して列挙メンバーを指定するときは、列挙メンバーを直接参照するのではなく char ベクトルを使用します。ただし、列挙メンバーを直接指定すると char から列挙型への変換が不要になります。

列挙クラスは、コンストラクター構文を使用する変換関数を提供します。

today = WeekDays('Tuesday');

char ベクトル 'Tuesday' は列挙メンバー WeekDays.Tuesday に一致するため、Weekdays char メソッドは変換を実行できます。

class(today)
ans =

WeekDays

WeekDay クラス コンストラクターと char ベクトルの cell 配列を使用して列挙配列を作成します。

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

    Monday       Wednesday    Friday 
class(wd)
ans =

WeekDays

cell 配列のすべての 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 の呼び出しでは、%s 書式指定子での指定により、char ベクトルが必要です。

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

既定の列挙メンバー

列挙クラスの既定のメンバーは、enumeration ブロック内で定義された最初の列挙メンバーです。WeekDays クラスの場合、既定の列挙メンバーは WeekDays.Monday です。

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

MATLAB では、配列変数があらかじめ存在していなくても、配列の任意の要素への代入が可能です。代入されていない配列要素を埋めるために、MATLAB は既定の列挙メンバーを使用します。

たとえば、配列 a の要素 5 に値を代入します。

clear a
a(5) = WeekDays.Tuesday;

MATLAB は、既定の列挙メンバーで配列要素 a(1:4) の値を初期化しなければなりません。配列 a の 5 番目の要素への代入の結果は、次のようになります。

a
a = 

    Monday       Monday       Monday       Monday       Tuesday  

関連するトピック