Main Content

インデックス式におけるオブジェクト

インデックスとしてのオブジェクト

MATLAB® は、インデックス付き式内でオブジェクトをインデックスとして使用できます。配列インデックス付けルールが適用されるため、インデックスは、正の整数でなければなりません。したがって、MATLAB は、インデックス式で使用する正の整数である値をオブジェクトから導出できなければなりません。

X(A) などのインデックス付きの式 (A はオブジェクト) では、MATLAB により関数 subsindex が呼び出されます。しかし、インデックス式がクラス X で定義された matlab.mixin.indexing.RedefinesParenmatlab.mixin.indexing.RedefinesDot、または matlab.mixin.indexing.RedefinesBrace からオーバーロードされたメソッドの呼び出しにつながる場合、MATLAB は subsindex を呼び出しません。

オブジェクトをインデックスとして実装する方法

1 つのオブジェクトの、別のオブジェクト X(A) によるインデックス付けを実装する方法はいくつかあります。

  • A を整数に変換する subsindex メソッドを A のクラスに定義します。X のクラスが matlab.mixin.indexing.RedefinesParenmatlab.mixin.indexing.RedefinesDot、または matlab.mixin.indexing.RedefinesBrace からメソッドをオーバーロードしない場合は、MATLAB が Asubsindex メソッドを呼び出して、インデックス操作を実行します。

  • X のクラスが RedefinesParenRedefinesDot、または RedefinesBrace からメソッドをオーバーロードする場合、これらのメソッドは Asubsindex メソッドを明示的に呼び出すことができます。A のクラスは、適切な値を返す subsindex メソッドを実装しなければなりません。

subsindex の実装

subsindex は、0 から prod(size(X))-1 までの範囲にある 0 ベースの整数インデックス値として、オブジェクトの値を返さなければなりません。

A オブジェクトを使用して B オブジェクトにインデックスを付けるとします。クラスの設計に応じて、B は 1 つのオブジェクトまたは配列となります。

C = B(A);

以下は subsindex メソッドの 2 つの例です。最初の例では、クラス Auint8 に変換できると仮定しています。2 番目は、クラス A がインデックス値をプロパティに保存すると仮定しています。

  • クラス A によって実装された subsindex メソッドは、オブジェクトを、インデックスとして使用される数値形式に変換できます。

    function ind = subsindex(obj)
       ind = uint8(obj);
    end

    obj のクラスは uint8 メソッドを実装して、オブジェクトから整数値への変換を提供します。

  • クラス Asubsindex を実装して、プロパティに保存されている数値を返します。

    function ind = subsindex(obj)
       ind = obj.ElementIndex;
    end

メモ

subsindex の値は 0 ベースで、1 ベースではありません。

参考

| |

関連するトピック