最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

列挙型の参照

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

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

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  

関連するトピック