列挙型の参照
列挙クラスのインスタンス
列挙メンバーは列挙クラスのインスタンスです。列挙メンバーを変数に代入して、列挙メンバーの配列を構成できます。列挙クラスがスーパークラスから派生する場合、列挙メンバーをスーパークラスのインスタンスに置き換えることができます。
WeekDays クラスは週の 5 日の列挙メンバーを定義します。
classdef WeekDays enumeration Monday, Tuesday, Wednesday, Thursday, Friday end end
特定の日を表す WeekDays クラスのオブジェクトを作成します。
today = WeekDays.Monday; tomorrow = WeekDays.Tuesday;
変数 today と変数 tomorrow は WeekDays クラスのオブジェクトです。
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 Fridaychar ベクトルを WeekDays 配列に追加します。
a(end+1) = 'Tuesday'a =
Monday Wednesday Friday TuesdayMATLAB は、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