Main Content

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

subsref および subsasgn の引数の数

MATLAB が引数の数を決定する方法

MATLAB® は、subsref または subsasgn を呼び出してインデックス付きの参照または代入を起動するコードの実行結果を決定します。MATLAB が subsref および subsasgn を呼び出すために使用する引数の数は、インデックス操作によって参照または代入される要素の数により決まります。つまり、インデックス コードによって、MATLAB が以下の場合に使用する引数の数が決定されます。

  • subsref の呼び出しから返す場合

  • subsasgn の呼び出しに渡す場合

したがって、subsref の呼び出しのための nargout の値と、subsasgn の呼び出しのための nargin の値は、インデックス コードによって決まります。

たとえば、ValuesArray クラスについて考えてみます。

classdef ValuesArray
   properties
      Values
   end
   methods
      function obj = ValuesArray(v)
         if nargin > 0
            obj.Values = v;
         end
      end
   end
end

10 個の ValuesArray オブジェクトの配列を作成します。

l = ValuesArray.empty;
for k = 1:10
   l(k) = ValuesArray(k);
end

次の添字による参照は 3 つの要素のコンマ区切りリストを返します。このステートメントで、subsrefnargout の値は 3 です。

l(1:3).Values
ans =

     1


ans =

     2


ans =

     3

添字による代入ステートメントの左辺は、MATLAB が subsasgn を呼び出すために使用する入力引数の数に影響します。次の添字による代入は、配列に追加された 3 つの要素に 3 つの値を代入します。この代入で、subsasgnnargin の値は 5 (オブジェクト、インデックス付きサブ構造体および代入する 3 つの値) です。

[l(11:13).Values] = l(1:3).Values
l = 

  1x13 ValuesArray array with properties:

    Values

右辺の引数の数が左辺の引数の数を満たさない場合、MATLAB はエラーを返します。

[l(11:13).Values] = l(1).Values
Insufficient number of outputs from right hand side of equal sign to satisfy
assignment.

subsref メソッドおよび subsasgn メソッドの構文

クラスが subsref をオーバーロードして '{}''.' または両方のタイプのインデックスをサポートし、処理が複数の値を返す場合、複数の値を返すには varargout を使用して subsref をオーバーロードします。

function varargout = subsref(A,S)
   ...
end

クラスが subsasgn をオーバーロードして '{}''.'、または両方のタイプのインデックスをサポートし、処理が複数の値を代入する場合は、複数の値を受け取るために varargin を使用して subsasgn をオーバーロードします。

function A = subsasgn(A,S,varargin)
   ...
end

関連するトピック