Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

subsasgn

添字による代入の再定義

構文

A = subsasgn(A,S,B)

説明

R2021b 以降で作成されたクラスについて、インデックス付けをカスタマイズする際に推奨されるプロセスは、matlab.mixin.indexing.RedefinesParenmatlab.mixin.indexing.RedefinesDot および matlab.mixin.indexing.RedefinesBrace のいずれかの組み合わせから継承することです。詳細については、オブジェクトのインデックス付けのカスタマイズを参照してください。

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

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

メモ

subsasgn は出力引数を指定して呼び出さなければなりません。subsasgn は、インデックス付けの操作で使用されたオブジェクト (最初の入力引数) を変更しません。変更されたオブジェクトを取得するには、出力を代入しなければなりません。

入力引数

A

インデックス付け操作で使用されるオブジェクト

S

2 つのフィールド typesubs のある構造体。複合型のインデックス式の場合、S はインデックスの各レベルごとに 1 つの構造体をもつ、構造体の配列です。

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

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

B

代入する値 (代入ステートメントの右辺)

出力引数

A

代入ステートメントの結果。これは最初の引数として渡される変更後のオブジェクトです。

subsasgn メソッドの実装で 1 つを超える値が代入される場合、3 番目の入力引数に varargin を使用します。

次の式の subsasgn の引数値について考えてみます。

A(1:2,:) = B;

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

式は以下のとおりです。

A{1:2} = B;

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

式は以下のとおりです。

A.field = B;

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

式は以下のとおりです。

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

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

ヒント

クラスで定義された subsasgn メソッド内では MATLAB が組み込みの 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) は、式の両辺で (スカラー添字の 1 つ 3 を無視して) 7 要素の添字が続く 4 要素の添字を使用しているため有効です。

拡張機能

バージョン履歴

R2006a より前に導入