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 で導入