主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

列挙クラスの定義

列挙クラス

枚举ブロックをクラス定義に追加することで,列挙クラスを作成します。たとえば,工作日クラスは,週の曜日を列挙します。

classdef工作日枚举星期一,星期二,星期三,星期四,星期五结束结束

以下の節のMATLAB®コードを実行するために,工作日クラス定義をパス上の00ファイルに配置します。

列挙メンバーの作成

以下のように,クラス名とメンバー名を使用して列挙メンバーを参照します。

类名。MemberName

たとえば,以下のように列挙メンバー工作日。周二を変数今天に割り当てます。

今天= WeekDays.Tuesday;

今天工作日クラスの変数です。

Name Size Bytes Class Attributes today 1x1 104 WeekDays
今天
今天=星期二

スーパークラス値への変換

列挙クラスがスーパークラスを指定する場合,オブジェクトをスーパークラスコンストラクターに渡すことで列挙オブジェクトをスーパークラスに変換できます。ただし,スーパークラスコンストラクターは自分自身のクラスを入力として受け取り,スーパークラスのインスタンスを返すことができなければなりません。MATLAB組み込み数値クラス(uint32など)では,この変換が可能です。

たとえば,轴承クラスはuint32組み込みクラスから派生します。

classdef轴承< uint32枚举北(0)东(90)南(180)西(270)结束结束

轴承。东メンバーを変数一个に割り当てます。

一个= Bearing.East;

一个をスーパークラスコンストラクターに渡し,uint32値を返します。

b = uint32(一个);谁
Name Size Bytes Class Attributes a 1x1 60 Bearing b 1x1 4 uint32

uint32コンストラクターはサブクラス轴承のオブジェクトを受け入れ,クラスuint32のオブジェクトを返します。

列挙クラス内でのメソッドの定義

他のすべてのMATLABクラスのように,列挙クラス内でメソッドを定義します。たとえば,工作日列挙クラスのisMeetingDayというメソッドを定義します。この使用例では,ユーザーは火曜日にミーティングを繰り返し行っています。メソッドは,入力引数が工作日メンバーの周二のインスタンスであるかどうかをチェックします。

classdef工作日枚举星期一,星期二,星期三,星期四,星期五结束方法函数tf = isMeetingDay(obj)周二= = obj;结束结束结束

工作日クラスのインスタンスでisMeetingDayを呼び出します。

今天= WeekDays.Tuesday;today.isMeetingDay
ans = 1

列挙メンバーをメソッドへの直接入力として使用することもできます。

isMeetingDay (WeekDays.Wednesday)
ans = 0

列挙クラス内でのプロパティの定義

列挙メンバーに関係したデータを保存しなければならないときは,プロパティを列挙クラスに追加します。クラスコンストラクターでプロパティの値を設定します。たとえば,SyntaxColorsクラスは次のようにして3つのプロパティを定義します。クラスコンストラクターは、クラス メンバーを参照したときに、入力引数の値を対応するプロパティに割り当てます。

classdefSyntaxColors属性R G B结束方法函数c = SyntaxColors(r, g, b);c.G = g;c.B = b;结束结束枚举关键字(0,0,1)String (1,0,1)结束结束

列挙メンバーを参照すると,コンストラクターはプロパティの値を初期化します。

e = SyntaxColors.Error;在途中
ans = 1

SyntaxColorsは値クラスなので(これは处理から派生しない),クラスコンストラクターのみがプロパティの値を設定できます。

急诊= 0
不能设置SyntaxColors的只读属性“R”。

プロパティを定義する列挙クラスについての詳細は,可変ハンドルと不変値の列挙メンバーを参照してください。

列挙クラスコンストラクターの呼び出しシーケンス

列挙ブロック内の各ステートメントは,列挙メンバーの名前です(オプションでその後に引数リストが付きます)。列挙クラスがコンストラクターを定義する場合、MATLAB はこのコンストラクターを呼び出して列挙インスタンスを作成します。

MATLABは,コンストラクターを明示的に定義しないすべての列挙クラスに対して,既定のコンストラクターを提供します。既定のコンストラクターは,以下のように列挙クラスのインスタンスを作成します。

  • 入力引数を使用しない(列挙メンバーが入力引数を定義しない場合)

  • そのメンバーの列挙クラスで定義されている入力引数を使用する

たとえば,保龄球クラスの入力引数は,保龄球没有に対しては0保龄球是的に対しては1です。

classdefBool <逻辑枚举否(0)是(1)结束结束

既定のコンストラクターは引数を最初のスーパークラスに渡すので,0および1の値はクラス逻辑です。つまり,次のステートメントです。

n = Bool.No;

コンストラクター内の次のステートメントと等しい逻辑への呼び出しとなります。

函数obj = Bool(val) obj@logical(val)结束

MATLABはメンバー引数を最初のスーパークラスにのみ渡します。たとえば,以下のような,別のクラスから派生した保龄球を考えてみます。

classdefBool < logical & MyBool枚举否(0)是(1)结束结束

以下のように,MyBoolクラスは特化した動作を追加できます。

classdefMyBool方法函数boolValues = testBools (obj)...结束结束结束

既定の保龄球コンストラクターは,あたかも次の関数のように定義されているかのように動作します。

  • 最初のスーパークラスのコンストラクターへ引数が渡される

  • 以降のコンストラクターには引数が渡されない

函数obj = Bool(val) obj@logical(val) obj@MyBool结束

関連するトピック