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