インデックス式におけるオブジェクト
インデックスとしてのオブジェクト
MATLAB® は、インデックス付き式内でオブジェクトをインデックスとして使用できます。配列インデックス付けルールが適用されるため、インデックスは、正の整数でなければなりません。したがって、MATLAB は、インデックス式で使用する正の整数である値をオブジェクトから導出できなければなりません。
X(A)
などのインデックス付きの式 (A
はオブジェクト) では、MATLAB により関数 subsindex
が呼び出されます。しかし、インデックス式がクラス X
で定義された matlab.mixin.indexing.RedefinesParen
、matlab.mixin.indexing.RedefinesDot
、または matlab.mixin.indexing.RedefinesBrace
からオーバーロードされたメソッドの呼び出しにつながる場合、MATLAB は subsindex
を呼び出しません。
オブジェクトをインデックスとして実装する方法
1 つのオブジェクトの、別のオブジェクト X(A)
によるインデックス付けを実装する方法はいくつかあります。
A
を整数に変換するsubsindex
メソッドをA
のクラスに定義します。X
のクラスがmatlab.mixin.indexing.RedefinesParen
、matlab.mixin.indexing.RedefinesDot
、またはmatlab.mixin.indexing.RedefinesBrace
からメソッドをオーバーロードしない場合は、MATLAB がA
のsubsindex
メソッドを呼び出して、インデックス操作を実行します。X
のクラスがRedefinesParen
、RedefinesDot
、またはRedefinesBrace
からメソッドをオーバーロードする場合、これらのメソッドはA
のsubsindex
メソッドを明示的に呼び出すことができます。A
のクラスは、適切な値を返すsubsindex
メソッドを実装しなければなりません。
subsindex の実装
subsindex
は、0
から prod(size(X))-1
までの範囲にある 0 ベースの整数インデックス値として、オブジェクトの値を返さなければなりません。
A
オブジェクトを使用して B
オブジェクトにインデックスを付けるとします。クラスの設計に応じて、B
は 1 つのオブジェクトまたは配列となります。
C = B(A);
以下は subsindex
メソッドの 2 つの例です。最初の例では、クラス A
を uint8
に変換できると仮定しています。2 番目は、クラス A
がインデックス値をプロパティに保存すると仮定しています。
クラス
A
によって実装されたsubsindex
メソッドは、オブジェクトを、インデックスとして使用される数値形式に変換できます。function ind = subsindex(obj) ind = uint8(obj); end
obj
のクラスはuint8
メソッドを実装して、オブジェクトから整数値への変換を提供します。クラス
A
はsubsindex
を実装して、プロパティに保存されている数値を返します。function ind = subsindex(obj) ind = obj.ElementIndex; end
メモ
subsindex
の値は 0 ベースで、1 ベースではありません。
参考
matlab.mixin.indexing.RedefinesParen
| matlab.mixin.indexing.RedefinesDot
| matlab.mixin.indexing.RedefinesBrace