このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
numArgumentsFromSubscript
subsref および subsasgn に基づいてカスタマイズされたインデックスの引数の数
説明
この関数は、subsref および subsasgn を実装するクラスのカスタマイズされたインデックスをサポートしています。R2021b 以降で作成されたクラスについて、インデックス付けをカスタマイズする際に推奨されるプロセスは、matlab.mixin.indexing.RedefinesParen、matlab.mixin.indexing.RedefinesDot および matlab.mixin.indexing.RedefinesBrace のいずれかの組み合わせから継承することです。このタイプのインデックスの引数を計算する同等の関数は、listLength です。詳細については、オブジェクトのインデックス付けのカスタマイズを参照してください。
は、n = numArgumentsFromSubscript(obj,s,indexingContext)subsasgn への必要な入力数または subsref からの必要な出力数を返します。
返されたインデックス式から出力される値の数や、コンマ区切りのリストに代入する値の数を記述するには、numArgumentsFromSubscript をオーバーロードします。これは、'{}' または '.' インデックスで終了するインデックス式です。関数 numArgumentsFromSubscript を使用すると、次のような処理ができます。
インデックス式に使用されるインデックス演算とインデックスにアクセスする
インデックス演算が参照ステートメント、関数に渡された式、あるいは代入のどのコンテキストで処理されるかを判別する
クラスが numArgumentsFromSubscript をオーバーロードする場合、MATLAB® がこれを呼び出して、要素数が 1 より大きい場合にインデックス演算に使用される配列要素の数を判別します。たとえば、次の '.' インデックス演算では numArgumentsFromSubscript の呼び出しが行われます。
objArray.a— ステートメント (Statement) で参照される要素の数func(objArray.a)— 式で返される要素の数 (Expression)[objArray.a] = rhs— コンマ区切りのリスト (Assignment) で代入される値の数
MATLAB は、呼び出しコンテキストを使用して numArgumentsFromSubscript で返された値を適用するかどうかを判断します。numArgumentsFromSubscript の実装方法によって、3 種類のインデックス付けステートメントにそれぞれ異なる出力を提供できます。たとえば、numArgumentsFromSubscript のこのオーバーロードでは次が行われます。
関数に渡されるインデックス式について
subsrefからの出力引数の想定される数を変更します。インデックス演算に必要な引数の数を判別するには、インデックス付けサブ構造体
sを使用します。
function n = numArgumentsFromSubscript(obj,s,indexingContext) if indexingContext == matlab.mixin.util.IndexingContext.Expression n = 1; else n = length(s(1).subs{:}); end end
subsref メソッドを varargout 出力を使って実装し、MATLAB が指定された出力引数の数を使用してこのメソッドを呼び出せるようにします。
function varargout = subsref(obj,s) ... end
例
入力引数
出力引数
ヒント
オーバーロードされた
subsrefおよびsubsasgnからの結果を制御するには、numelの代わりにnumArgumentsFromSubscriptをオーバーロードします。numArgumentsFromSubscriptをオーバーロードすることで、numelのオーバーロードに起因するエラーを回避できます。
バージョン履歴
R2015b で導入