インデックス式におけるオブジェクト
インデックスとしてのオブジェクト
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