組み込みクラスから派生した列挙
組み込みクラスのサブクラス化
列挙クラスは MATLAB® 組み込みクラスをサブクラス化できます。組み込みクラスから列挙クラスを派生すると、列挙メンバーをより有効に使用できるようになります。
列挙は組み込みクラスから機能を継承する。
数値または論理値を列挙メンバーに関連付けることができる。
列挙クラスの基本的な説明については、列挙クラスの定義を参照してください。
数値クラスからの列挙クラスの派生
メモ
組み込みの数値および論理クラスから派生した列挙クラスは、プロパティを定義できません。
列挙クラスが組み込み数値クラスをサブクラス化した場合、このサブクラスは列挙名に適用可能な順序付け演算と算術演算を継承します。
たとえば、Results
クラスは組み込みの int32
クラスをサブクラス化します。このクラスは、整数値を 4 つの列挙メンバー、First
、Second
、Third
および NoPoints
のそれぞれに関連付けます。
classdef Results < int32 enumeration First (100) Second (50) Third (10) NoPlace (0) end end
列挙メンバーは int32
クラスのメソッドを継承します (コロン演算子を除く)。これらの列挙型を数値のように使用します (合計する、並べ替える、平均を出す)。
isa(Results.Second,'int32')
ans = 1
たとえば、以下のように 2 つのチームをランク付けするために、番号の代わりに列挙型名を使用します。
Team1 = [Results.First, Results.NoPlace, Results.Third, Results.Second]; Team2 = [Results.Second, Results.Third, Results.First, Results.First];
これらの Results
列挙型に対して int32
演算を実行します。
sum(Team1)
ans = 160
mean(Team1)
ans = 40
sort(Team2,'descend')
ans = First First Second Third
Team1 > Team2
ans = 1 0 0 0
sum(Team1) < sum(Team2)
ans = 1
列挙型インスタンスの作成方法
組み込みクラス (たとえば int32
) から派生する列挙クラスを初回に参照したときは、MATLAB は列挙メンバーに関連付けられている入力引数をスーパークラス コンストラクターに渡します。たとえば、以下のように定義されている Second
Results
メンバーを参照すると
Second (50)
MATLAB は以下を呼び出して
int32(50)
この Results
オブジェクトの int32
アスペクトを初期化します。
列挙型名のエイリアス方法
MATLAB 組み込み数値クラスおよび論理クラスから派生した列挙クラスは、基本値に対して複数の名前を定義できます。基本値をもつ列挙型ブロック内の最初の名前はその基本値の実際の名前であり、以降の名前はエイリアスです。
以下のように、実際の名前と同じスーパークラス コンストラクター引数でエイリアス名を指定します。
classdef Bool < logical enumeration No (0) Yes (1) off (0) on (1) end end
たとえば、Bool.off
列挙メンバーのインスタンスの実際の名前は No
です。
a = Bool.No
a = No
b = Bool.off
b = No
スーパークラス コンストラクターは基本値を出力
列挙メンバーに関連付けられる実際の基本値は組み込みのスーパークラスによって返される値です。たとえば、クラス double
をもっているコンストラクター引数によって定義された Bool
クラスを検討してみましょう。
classdef Bool < logical enumeration No (0) Yes (100) end end
このクラスは組み込みの logical
クラスから派生しています。そのため、列挙メンバーに対する基本値は、その値が渡されるときの logical
が返す値により異なります。
a = Bool.Yes
a = Yes
logical(a)
ans = 1
数値組み込みクラスのサブクラス化方法
FlowRate
列挙クラスは、Low
、Medium
、High
の 3 つのメンバーを定義します。
classdef FlowRate < int32 enumeration Low (10) Medium (50) High (100) end end
列挙メンバーのインスタンスを参照します。
setFlow = FlowRate.Medium;
このステートメントは、MATLAB に引数値 50
を使用して既定のコンストラクターを呼び出させます。MATLAB は最初のスーパークラスにこの引数を渡します (この例では int32(50)
)。結果は、FlowRate.Medium
メンバーに対する 32 ビット整数として 50
の基本値となります。
FlowRate
は組み込み数値クラス (int32
) をサブクラス化するので、このクラスはプロパティを定義することができません。ただし、FlowRate
は、コンバーター メソッドを含む int32
メソッドを継承します。プログラムは、コンバーターを使用して基本値を取得することができます。
setFlow = FlowRate.Medium; int32(setFlow)
ans = 50
既定のコンバーター
列挙値が組み込み数値クラスのサブクラスである場合は、列挙クラスの名前を使用して、組み込み数値データを列挙値に変換することができます。以下に例を示します。
a = Bool(1)
a = Yes
また、列挙クラスは入力引数としてそれ自身のクラスの列挙メンバーを受け入れます。
Bool(a)
ans = Yes
コンバーターは、入力と同じサイズのオブジェクトを返します。
Bool([0,1])
ans = No Yes
empty
静的メソッドを使用して、空の列挙配列を作成します。
Bool.empty
ans = 0x0 empty Boolean enumeration.