このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
オブジェクトのクラスの関係演算子を定義して,条件付きステートメントでのオブジェクトの使用を有効にします。处理
クラスから派生するクラスは関係演算子を継承します。値クラスは,オブジェクトを含む条件付きステートメントの使用をサポートする演算子を実装できます。クラスの演算子を定義する方法の詳細については,演算子のオーバーロードを参照してください。
MATLAB®では,オブジェクトのクラスで情商
メソッドが定義されている場合に,开关
ステートメントでオブジェクトを使用できます。情商
メソッドでは,そのクラスのオブジェクトで==
演算を実装します。
オブジェクトに対し,case_expression
==
switch_expression
はMATLABによる开关
/情况下
ステートメントの評価の方法を定義します。
情商
メソッドによって返される値は逻辑
型であるか,または逻辑
型に変換可能でなければなりません。情商
メソッドの出力が逻辑以外の値の場合,MATLABは情商
の出力を逻辑値に変換しようとします。
メモ
列挙クラスに情商
メソッドを定義する必要はありません。开关ステートメント内の列挙型を参照してください。
处理
クラスから派生したすべてのクラスは情商
メソッドを継承します。たとえば,次の式について考えてみます。
h1 h2 = =
h1
とh2
が同じオブジェクトに対するハンドルの場合,この式は真正的
になります。
たとえば,BasicHandle
クラスは处理
から派生します。
classdefBasicHandle <处理属性Prop1结束方法函数obj = BasicHandle (val)如果Nargin > 0 obj。Prop1 = val;结束结束结束结束
BasicHandle
オブジェクトを作成し,开关
ステートメント内で使用します。
h1 = BasicHandle (处理对象的);h2 = h1;
开关
ステートメントコードは以下のようになります。
开关h1情况下h2 disp (h2被选中的)否则disp (“h2不选择”)结束
結果は次のようになります。
h2被选中
开关
ステートメントで使用できるオブジェクトはスカラーオブジェクトのみです。例:
h1 (1) = BasicHandle (处理对象的);h1 (2) = BasicHandle (处理对象的);h1 (3) = BasicHandle (处理对象的);h2 = h1;
开关h1情况下h2 disp (h2被选中的)否则disp (“h2不选择”)结束
結果は次のようになります。
SWITCH表达式必须是标量或字符串常量。
この例では,h1
はスカラーではありません。开关
ステートメントを開始する前に,isscalar
を使用すると,オブジェクトがスカラーであるかどうかを調べることができます。
开关
ステートメント内で値クラスオブジェクトを使用できるようにするには,クラスに情商
メソッドを実装します。情商
メソッドを使用して,2つのクラスオブジェクトが等価となるための条件を指定します。
一部のMATLAB関数は,関数の実装内で組み込みの==
演算子も使用します。そのため,クラスオブジェクトがMATLABコード内で組み込みタイプと同じように機能するように,情商
は組み込みの情商
と置き換えられるように実装します。
情商
メソッドを実装して==
比較の結果を表す逻辑配列を返すようにします。
たとえば,SwitchOnVer
クラスで情商
メソッドを実装すると,2つのオブジェクトで版本
プロパティの値が同じである場合に,==
演算に対して真正的
を返します。また,情商
は組み込みの情商
と同じように配列に対しても使用できます。以下の式について考えます。
其中obj1 = = methoda
情商
メソッドは次のように機能します。
其中obj1
とmethoda
の両方がスカラーの場合は,情商
でスカラー値が返されます。
其中obj1
とmethoda
の両方が非スカラー配列の場合,これらの配列は同じ次元をもつ必要があり,情商
では同じサイズの配列が返されます。
1つの入力引数がスカラーでもう1つの入力引数が非スカラー配列の場合,情商
では,スカラーオブジェクトが非スカラー配列と同じ次元をもつ配列であるかのように扱われます。
次に,情商
メソッドを実装するクラスを示します。目的の用途に対して適切なエラーチェックを確実に行うように実装してください。
classdefSwitchOnVer属性版本结束方法函数obj = SwitchOnVer(版本)如果Nargin > 0 obj。版本=版本;结束结束函数表示“eq(其中obj1 methoda)如果~ strcmp(类(其中obj1)类(methoda))错误('对象不属于同一类')结束s1 =元素个数(其中obj1);s2 =元素个数(methoda);如果S1 == s2 bol = false(size(obj1));为k = 1: s1如果其中obj1 (k)。版本==methoda(k).Version bol(k) = true;其他的波尔(k) = false;结束结束elseifs1 == 1 bol = scalarExpEq(obj2,obj1);elseifs2 == 1 bol = scalarExpEq(obj1,obj2);其他的错误(“维missmatch”)结束函数ret = scalarExpEq (ns, s)% ns是非标量数组% s是标量数组ret = false(大小(ns));n =元素个数(ns);为kk = 1: n如果ns(乐)。Version == s.Version ret(kk) = true;其他的ret (kk) = false;结束结束结束结束结束结束
开关
ステートメント内でSwitchOnVer
オブジェクトを使用します。
创建已知版本的对象ov1 = SwitchOnVer (1.0);ov2 = SwitchOnVer (2.0);ov3 = SwitchOnVer (3.0);……如果isscalar (objIn)开关(objIn)情况下ov1 disp (“这是1.0版”)情况下ov2 disp (“这是2.0版”)情况下ov3 disp (“这是3.0版”)否则disp (“没有版本”)结束其他的错误('输入对象必须是标量')结束
MATLABでは,列挙クラスに対し明示的に定義された情商
メソッドを要求せずに,开关
ステートメントで列挙を使用できます。
たとえば,WeeklyPlanner
クラスは週の5日の列挙型を定義します。静的メソッドtodaySchedule
の开关
/情况下
ステートメントは,現在の曜日に対応する列挙メンバーにディスパッチします。関数日期
とdatestr
は,現在の曜日の名前をもつ字符
ベクトルを返します。
classdefWeeklyPlanner枚举星期一,星期二,星期三,星期四,星期五结束方法(静态)函数dayschedule dayName = datestr(日期,“dddd”);dayEnum = WeeklyPlanner。(dayName);开关dayEnum情况下WeeklyPlanner。星期一disp (周一安排的)情况下WeeklyPlanner。周二disp (“星期二安排”)情况下WeeklyPlanner。周三disp (“周三安排”)情况下WeeklyPlanner。周四disp (“周四计划”)情况下WeeklyPlanner。周五disp (周五安排的)结束结束结束结束
todaySchedule
を呼び出し,今日のスケジュールを表示します。
WeeklyPlanner.todaySchedule
組み込み型から派生した列挙クラスは,スーパークラスの情商
メソッドを継承します。たとえば,流量
クラスはint32
から派生します。
classdef流量< int32枚举低(10)中(50)高(100)结束结束
関数switchEnum
は入力引数をオンにします。入力引数は流量
の列挙値をとります。
函数switchEnum (inpt)开关inpt情况下10 disp ('流量= 10 cfm')情况下50 disp ('流量= 50 cfm')情况下100 disp ('流量= 100 cfm')结束结束
列挙値を使用してswitchEnum
を呼び出します。
switchEnum (FlowRate.Medium)
流量= 50立方英尺