Main Content

オブジェクトのインデックス付けのカスタマイズ

既定のオブジェクトのインデックス付け

MATLAB® クラスは既定でオブジェクト配列インデックス付けをサポートしています。多くのクラス設計では、この動作に変更を加える必要はありません。

配列では、添字表記を使用して配列の要素を参照し代入することが可能です。この表記は特定の配列要素のインデックスを指定します。たとえば、関数 randi の使用と連結によって、数値配列を 2 つ作成するものとします。

1 から 9 までの整数からなる 3 行 4 列の配列を作成します。

A = randi(9,3,4)
A =

     4     8     5     7
     4     2     6     3
     7     5     7     7

3、6、9 の数値からなる 1 行 3 列の配列を作成します。

B = [3 6 9];

インデックス値をかっこ内で使用して 2 つの配列の要素を参照し、代入します。

B(2) = A(3,4);
B
B =
     3     7     9

MATLAB の既定の動作は、ユーザー定義オブジェクトにも対応します。たとえば、同じクラスに属するオブジェクトの配列を作成します。

for k=1:3
   objArray(k) = MyClass;
end

オブジェクト配列 objArray の 2 つ目の要素を参照すると、k = 2 のときに作成されるオブジェクトを返します。

D = objArray(2);
class(D)
ans =

MyClass

同じクラスに属するオブジェクトの配列、または初期化されていない変数にオブジェクトを割り当てることができます。

newArray(3,4) = D;

オブジェクトの配列は、MATLAB の数値配列のような機能をもちます。ユーザー クラスで標準的な配列の動作を提供するために特別なメソッドを実装する必要はありません。

配列インデックス付けに関する一般的な情報は、配列インデックス付けを参照してください。

モジュール インデックス クラスを使用したオブジェクトのインデックス付けのカスタマイズ

R2021b 以降。subsref メソッドおよび subsasgn メソッドのコード パターンよりも推奨。

クラスのインデックス付け動作を変更するには、モジュール インデックス mixin クラスの 1 つ以上から継承します。各クラスが 1 つのインデックス付け操作のグループに対応します。

クラスで定義される各インデックス付け操作の詳細を処理する抽象メソッドが各クラスで定義されています。それらのメソッドを実装して、設計に必要な操作を実行します。

これらのクラスは個別に継承できます。たとえば、RedefinesParen のみから継承すれば、小かっこのインデックス付けのみをカスタマイズできます。その場合のドットと中かっこのインデックス付けの動作は、MATLAB の既定の動作になります。

1 つまたは 2 つのレベルのインデックス付けだけをカスタマイズし、他の操作は別の MATLAB オブジェクトに送ることもできます。たとえば、中かっこのインデックス付けをカスタマイズし (RedefinesParen を使用)、ドット メソッドの呼び出しには既定の動作を使用するクラスを作成できます。

myInstance(2,1).value

この動作の例については、Customize Parentheses Indexingを参照してください。

関連するトピック