Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

インデックス付きの参照

インデックス付き参照の動作

オブジェクトのインデックス付き参照には、小かっこ、中かっこ、ドットと名前の 3 つの形式があります。

A(I)
A{I}
A.name

これらのいずれのステートメントでも、結果として MATLAB® がクラス Asubsref を呼び出すか、または A のクラスが subsref メソッドを実装していない場合は組み込み関数 subsref を呼び出します。

MATLAB は、次のように subsref に 2 つの引数を渡して、subsref がインデックス付き参照の結果を返すようにする必要があります。

B = subsref(A,S)

最初の引数は、参照されているオブジェクト A です。2 つ目の引数 S は、次の 2 つのフィールドをもつ substruct です。

  • S.type は、使用されるインデックス付けタイプを指定する '()''{}' または '.' を含む char ベクトルです。

  • S.subs は、実際のインデックスまたは名前を含む cell 配列または char ベクトルです。インデックスとして使われるコロンは、コロン記号 ':' として cell 配列に渡されます。コロンを使用して指定される範囲 (例、2:5) は、2 3 4 5 と展開されます。

たとえば、次のような式があるとします。

A(1:4,:)

これによって、MATLAB は subsref(A,S) を呼び出すことになります。ここで、S は 2 要素の cell 配列をもつ 1 行 1 列の構造体です。cell 配列には数値 1、2、3、4 およびコロン記号「:」が含まれます。

S.type = '()'
S.subs = {1:4,':'} 

S.subs の各セルの内容を返すと、1 番目の次元のインデックス値と、2 番目の次元の char ベクトル ':' が得られます。

S.subs{:}
ans =

     1     2     3     4

ans =

:

既定の subsref は行 1 から行 4 の配列の要素すべてと、配列内のすべての列を返します。

同様に、式

A{1:4}

では数値 1、2、3、4 を含む cell 配列を使用します。

S.type ='{}'
S.subs = {1:4} 

既定の subsref は、行 1 から行 4 の cell 配列の要素すべての内容と、配列内のすべての列を返します。

次の式

A.Name

subsref(A,S) を呼び出しますが、ここで struct S の値は次のとおりです。

S.type = '.'
S.subs = 'Name'

複合インデックス付きの参照

これらの簡単な呼び出しは、より複雑なインデックス式で組み合わされます。そのような場合、length(S) はインデックスのレベルの数です。たとえば、

A(1,2).PropertyName(1:4)

subsref(A,S) を呼び出しますが、ここで S は以下の値をもつ structs の 3 行 1 列の配列です。

S(1).type = '()'    S(2).type = '.'              S(3).type = '()'
S(1).subs = {1,2}   S(2).subs = 'PropertyName'   S(3).subs = {1:4}

関連するトピック