このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
枚举
ブロックをクラス定義に追加することで,列挙クラスを作成します。たとえば,工作日
クラスは,週の曜日を列挙します。
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结束