ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

subsasgn

添字を使用した代入

構文

A = subsasgn(A, S, B)

説明

A = subsasgn(A, S, B) は、A がオブジェクトの場合、構文 A(i) = BA{i} = B、または A.i = B の MATLAB® に呼び出されます。

MATLAB では、組み込み関数 subsasgn を使用して、インデックスが付けられた代入ステートメントを解釈します。クラスのインデックス付きの代入動作を変更するには、クラス内に subsasgn をオーバーロードします。

A が、基本クラスである場合 (「MATLAB の基本クラス」を参照)、A へのインデックス付きの参照は組み込み関数 subsasgn を呼び出します。そのクラスに対してオーバーロード済みの subsasgn メソッドは呼び出しません。したがって、A がクラス double の配列である場合に @double/subsasgn メソッドが MATLAB パスにある場合は、ステートメント A(I) = B は、組み込み関数 subsasgn を呼び出します。

入力引数

A

オブジェクト

S

2 つのフィールド typesubs のある struct 配列。

  • type は、'()''{}''.' を含む文字列です。ここで、'()' は整数の添字を、'{}' はセル配列の添字を、'.' は添字の付いた構造体のフィールドを指定します。

  • subs は、実際の添字を含むセル配列、または文字列です。

B

代入値 (右側)

出力引数

A

代入計算の結果。

以下の式で MATLAB が subsasgn を呼び出す方法を示します。

A(1:2,:) = B;

構文 A(1:2,:) = B は、A = subsasgn(A,S,B) を呼び出します。S は、S.type = '()' かつ S.subs = {1:2,':'} である 1 行 1 列の構造体です。文字列 ':' は、コロンが添字として使用されたことを示しています。

以下の式で MATLAB が subsasgn を呼び出す方法を示します。

A{1:2} = B;

構文 A{1:2} = B は、A = subsasgn(A,S,B) を呼び出します。ここで、S.type = '{}' かつ S.subs = {[1 2]} です。

以下の式で MATLAB が subsasgn を呼び出す方法を示します。

A.field = B;

構文 A.field = B は、A = subsasgn(A,S,B) を呼び出します。ここで、S.type = '.' かつ S.subs = 'field' です。

以下の式で MATLAB が subsasgn を呼び出す方法を示します。

A(1,2).name(3:5)=B;

単純な呼び出しを簡単な方法で組み合わせることで、さらに複雑なインデックス式になります。ここで、length(S) は添字を使用しているレベル数です。たとえば、S が、次の値をもつ 3 行 1 列の構造体配列のとき、A(1,2).name(3:5)=B は、A=subsasgn(A,S,B) を呼び出します。

S(1).type = '()'S(2).type = '.'S(3).type = '()'
S(1).subs = {1,2}S(2).subs = 'name'S(3).subs = {[3 4 5]}

詳細

すべて展開する

ヒント

クラス自身のメソッド内で、MATLAB は、定義されているクラス subsasgn ではなく、組み込みの subsasgn を呼び出します。この動作により、クラスに対して特別なインデックスを定義するときに、既定の subsasgn 動作を使用することができます。詳細は、「クラス メソッド内の subsref と subsasgn — 組み込みの呼び出し」を参照してください。

アルゴリズム

割り当て A(J,K,...) = B(M,N,...) で、添字 JKMN などは、以下のすべてが真である場合に、スカラー、ベクトル、または配列になります。

  • B に対して指定されている添字の数は、1 に等しい末尾の添字を除き、ndims(B) の戻り値を超えません。

  • A に指定された非スカラーの添字の数は、B に指定された非スカラーの添字の数に等しい。たとえば、A(5,1:4,1,2) = B(5:8) は、式の両辺で非スカラーの添字が 1 つずつ使用されているため有効です。

  • A に対して指定されたすべての非スカラー添字の次数と長さは、B に指定された非スカラーの添字の次数と長さに一致する。たとえば、A(1:4, 3, 3:9) = B(5:8, 1:7) は、式の両辺で 7 要素の添字が続く 4 要素の添字を使用しているため有効です (スカラー添字の 1 つ 3 を無視)。

    オーバーロードされた関数 subsasgn での numel の使用に関する情報は、関数 numel を参照してください。

この情報は役に立ちましたか?