matlab.mixin.Heterogeneousクラス
パッケジ:matlab.mixin
異種混合配列を構成するスパクラス
説明
matlab.mixin.Heterogeneous
は,異種混合配列の構成をサポトする抽象クラスです。異種混合配列とは,所定のクラスとは異なるオブジェクトの配列,ですべてルートクラスのインスタンスであるか,そこから取得したものです。ルトクラスは,matlab.mixin.Heterogeneous
から直接取得します。
メソッド
保護されたメソッド
matlab.mixin.Heterogeneous.getDefaultScalarElement |
異種混合配列演算に対する既定のオブジェクトを返す |
詳細
異種混合階層
matlab.mixin.Heterogeneous
は,ンスタンスを異種混合配列に結合できるクラスの階層を定義するときに使用します。
以下のクラス定義では,HierarchyRoot
から取得したクラスの邮箱ンスタンスを結合する異種混合配列を構成できます。
classdefHierarchyRoot < matlab.mix . heterogeneous% HierarchyRoot是matlab.mix . heterogeneous的直接子类。% HierarchyRoot是这个异构层次结构的根。结束
matlab.mixin.Heterogeneous
から直接HierarchyRoot
クラスを取得すると,HierarchyRoot
クラスがクラス階層のルトになります。この階層のメンバの。有効な異種混合配列を構成するために結合できるのは,同じルートクラスから取得したクラスのインスタンスのみです。
異種混合配列のクラス
異種混合配列のクラスは常に,配列中のすべてのオブジェクトに共通する最も特定的なスーパークラスのクラスとなります。たとえば,以下のクラス階層を定義するとします。
LeafA
の邮箱ンスタンスとLeafB
のンスタンスを含む配列を構成すると,クラス中间
の配列が作成されます。
array = [LeafA LeafB];类(harray)
ans =中间
LeafC
の邮箱ンスタンスとLeafD
のンスタンスを含む配列を構成すると,クラスHierarchyRoot
の配列が作成されます。
array = [LeafC];类(harray)
ans = HierarchyRoot
LeafA
の邮箱ンスタンスと他のLeafA
のンスタンスを含む配列を構成すると,LeafA
クラスの同種配列が作成されます。
array = [LeafA LeafA];类(harray)
ans = LeafA
異種混合配列は,同じ階層ル,ト(たとえば,前述の階層のHierarchyRoot
クラス)から派生したオブジェクトでのみ構成できます。
複数のスーパークラスから派生したオブジェクトで異種混合配列を構成できますが,その階層にある1つの分岐のみが異種混合ルートを定義できます。
異種混合配列は,異種混合階層から2。通常、この処理は連結または以及ンデックス付き代入です。たとえば,以下のステートメントは、インデックス付き代入を使用して異種混合配列を構成します。
array(1) = LeafA;array(2) = LeafC;类(harray)
ans =中间
配列にmatlab.mixin.Heterogeneous
から取得したオブジェクトが含まれている場合,新しいオブジェクトをこの配列に割り当てると,配列のクラスが変化することがあります。たとえば,LeafA
クラスのオブジェクトのみを含む同種配列を考えてみましょう。
harray = [LeafA,LeafA,LeafA];类(harray)
ans = LeafA
同じルートから取得した別のクラスのオブジェクトを同種配列に追加すると,配列のクラスが最も特定的なスーパークラスに変換されます。
array(4) = LeafB;类(harray)
ans =中间
メソッドディスパッチング
上位引数が異種混合配列であるメソッドをmatlab®が呼び出す場合,以下のことが必要となります。
このメソッドが,配列のクラスから直接定義するか,またはスーパークラスから継承することにより,この異種混合配列のクラスについて定義されている。
このメソッドが
密封=真
である(サブクラスによってオバラドされない)。継承されたメソッドをシールする必要がある場合は,“継承されたメソッドのシーリング”を参照してください。
異種混合配列のクラスは,同種配列の場合と同様に,指定したメソッドを呼び出すときに実行するクラスメソッドを決定します。Matlabは,メソッドにディスパッチするときに,配列中の各要素のクラスを評価しません。
異種混合配列で呼び出されるメソッドの要件が密封=真
である場合,すべての配列要素で正しく,予想可能な挙動が確実になります。
異種混合配列外から継承したメソッドが密封=真
ではない場合にこれらのメソッドを異種混合配列で呼び出すには,これらのメソッドをオーバーライドしなければなりません。
たとえば,matlab.mixin.Heterogeneous
に加えて,matlab.mixin.SetGet
をサブクラス化して,異種混合配列を定義するとします。クラスの構成に合わせて,集
メソッドをオバラドし,matlab.mixin.SetGet
スパクラスを呼び出します。
classdefHeterogeneousSetGet < matlab.mix . setget & matlab.mix . heterogeneous . setget属性P结束方法(密封)函数varargout = set(obj, varargout) [varargout{1:nargout}] = set@matlab.mixin.SetGet(obj,varargin{:});结束结束结束
メソッドの実装では,異種混合配列harray
,およびスカランデックスn
、式
harray (n)
が異種混合配列でないことを利用できます。したがって,異種混合配列の1つの要素でメソッドを呼び出す場合,異種混合配列の特殊要件は適用されません。
既定のオブジェクトの定義
オブジェクト配列を処理する場合(異種混合および同種),MATLABは,既定のオブジェクトを作成し,引数なしのクラスコンストラクターを呼び出して,欠落している配列要素に埋め込みます。欠落している配列要素の埋め込みは,以下のような場合に必要となります。
ンデックス付き代入によりギャップがある配列が作成される。たとえば,
harray
がまだ定義されていない場合,以下のようになります。array(5) = LeafA;
MATLABが指定のオブジェクトのクラス定義を見つけられない場合,垫ファイルから異種混合配列をロードします。
matlab.mixin.Heterogeneous
クラスは,getDefaultScalarElement
を呼び出したメソッドの既定の実装を実行します。このメソッドは,ルートクラスが抽象ではないかぎり,異種混合階層のルートクラスのインスタンスを返します。
ルートクラスが抽象である場合,または異種混合階層のクラスでルートクラスが適切な既定のオブジェクトではない場合,getDefaultScalarElement
メソッドをオバ。
異種混合階層のルトクラスでgetDefaultScalarElement
を呼び出すmatlab.mixin.Heterogeneous
メソッドをオバラドして,既定のオブジェクトのクラスを指定します。getDefaultScalarElement
は,ル。
getDefaultScalarElement
メソッドは,以下のシグネチャを含んでいます。
方法(静态,密封,访问=受保护)函数defaultObject = getDefaultScalarElement…结束结束
getDefaultScalarElement
メソッドは,以下の条件を満たさなければなりません。
静的- matlabは,オブジェクトなしでこのメソッドを呼び出します。
保護- matlabはこのメソッドを呼び出しますが,オブジェクトユは呼び出しません。
シールド(必須ではない)——このメソッドをシールし,異種混合階層のユーザーが,クラスの意図した挙動を変更しないようにします。
スカラオブジェクトを返せなければなりません。
戻り値はルトクラスの
isa
テストを渡さなければなりません。すなわ,以下のようになります。(isa (getDefaultScalarElement”
HierarchyRoot
”)ここで
HierarchyRoot
は異種混合階層ルトクラスの名前です。これは,既定のオブジェクトが,ルートクラスから取得したクラスのインスタンスを取れることを意味します。
ンデックス付けまたは連結を再定義できない
異種混合配列では、一貫した以及ンデックス付けと連結挙動が必要です。そのため,matlab.mixin.Heterogeneous
のサブクラスは既定の电子邮箱ンデックス付き参照,电子邮箱ンデックス付き代入,連結挙動を変更できません。
サブクラスで以下のメソッドをオバラドできません。
猫
horzcat
vertcat
subsref
subsasgn
matlab.mixin.Heterogeneous
に加えて,サブクラスからサブクラスを継承する複数継承の場合,サブクラスはこれらのいずれのメソッドも定義できません。
次の形式のステトメントは
A = [obj1 obj2…];
大かっこ内に示されたオブジェクトを含む配列一个
を作成します。
同じクラスの异构
オブジェクトを連結すると,オブジェクトのクラスが維持され,異種混合配列は作成されません。
同じルトスパクラスから取得したが,異なるクラスである异构
オブジェクトを連結すると,異種混合配列が作成されます。MATLABは、すべてが同じルート階層の一部である場合、配列メンバーのクラスを変換しません。
次の形式のステトメントは
A (m:n) = [objm…]objn];
割り当ての左側で指定された配列要素(m: n
に右側のオブジェクトを割り当てます。
異種混合配列へのンデックス付き代入では,以下のすべてが可能です。
配列のサ邮箱ズの増減。
既存の配列要素の上書き。
配列内に含まれるオブジェクトのプロパティ値の変更。
配列のクラスの変更。
配列が異種混合かどうかの変更。
次の形式のステトメントは
A =数组(m:n);
ンデックスm: n
から配列一个
へ参照されるharray
の要素を代入します。
異種混合配列でのンデックス付き参照は,元の配列のサブ範囲を返します。このサブ範囲内(m: n
)の要素に基づいて,結果は,元の配列と異なるクラスになり,異種混合ではなくなる場合もあります。
非メンバオブジェクトの変換
同じルートクラスから取得したのではないオブジェクトで異種混合配列を作成しようとした場合,MATLABは,convertObject
メソッドが存在すればそれを呼び出し,支配クラスにオブジェクトを変換します。convertObject
メソッドを実装すると,異種混合階層の一部ではないオブジェクトを含む異種混合配列が構成できます。
2 ecommのクラス一个
およびB
があるとします。ここで,B
はmatlab.mixin.Heterogeneous
から取得されず,一个
およびB
はmatlab.mixin.Heterogeneous
から取得した異なるルトクラスから取得されます。
Matlabは,以下の場合,一个
のルトクラスで実装されたconvertObject
メソッドを呼び出そうとします。
ンデックス付きの代入
A(k) = B
水平および垂直連結
[A]和[A;B]
[A,B]和[A;B]
異種混合階層でクラスが定義されていないオブジェクトの変換をサポトする場合,convertObject
メソッドを実装します。クラス構成でこの変換が不要な場合は、このメソッドを実装する必要はありません。
convertObject
メソッドを実装できるのは,異種混合階層のルトクラスのみです。
convertObject
メソッドは,以下のシグネチャを含めなければなりません。
方法(静态,密封,访问=受保护)函数cobj = convertObject(DomClass,objToConvert)…结束结束
ンデックス付き代入A(k) = B
と連結[B]
の場合:
DomClass
は配列一个
のクラス名です。objToConvert
は変換するオブジェクト(この場合は.B
です。cobj
は一个
が属する異種混合階層の正規メンバです。
convertObject
はクラス一个
の有効なオブジェクトを返さなければなりません。返されない場合,matlabではエラが出力されます。
バジョン履歴
参考
Matlabコマンド
次のmatlabコマンドに対応するリンクがクリックされました。
コマンドをmatlabコマンドウィンドウに入力して実行してください。WebブラウザはMATLABコマンドをサポトしていません。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。