繰り返し引数の検証
繰り返し引数は、引数として繰り返し指定可能な位置引数です。Repeating
属性を含む arguments
ブロック内で繰り返し引数を宣言します。
arguments (Repeating) arg1 arg2 ... end
関数には、入力用と出力用にそれぞれ 1 つずつ Repeating
arguments
ブロックを含めることができます。Repeating
input arguments ブロックには 1 つ以上の繰り返し引数を含めることができますが、Repeating
output arguments ブロックには 1 つの繰り返し引数のみ含めることができます。
Repeating
arguments
ブロックを定義する関数は、ブロック内のすべての引数の 0 回以上の出現で呼び出すことができます。関数の呼び出しに繰り返し引数が含まれる場合、Repeating
arguments
ブロック内のすべての引数がそれぞれの繰り返しに含まれていなければなりません。
たとえば、Repeating
arguments
ブロックが入力引数 x
および y
を定義する場合は、それぞれの繰り返しに x
と y
の両方が含まれていなければなりません。
繰り返し入力引数は既定値を指定できないため、オプションにはできません。ただし、繰り返し引数を含めずに関数を呼び出すことはできます。
関数では、繰り返し入力引数を位置引数の後に、かつ名前と値の引数の前に宣言しなければなりません。名前と値の引数は Repeating
ブロック内で指定できません。名前と値の引数の詳細については、名前と値の引数の検証を参照してください。
関数内で、各繰り返し引数は、関数呼び出しで渡される繰り返しの数と等しい数の要素をもつ cell 配列になります。cell 配列の各要素に検証が適用されます。この引数の使用を 0 に指定して関数を呼び出すと、cell 配列のサイズは 1 行 0 列になります。つまり、これは空になります。
たとえば、次の関数では 3 つの繰り返し引数 x
、y
、および option
のブロックが宣言されます。
function [xCell,yCell,optionCell] = fRepeat(x,y,option) arguments (Repeating) x double y double option {mustBeMember(option,["linear","cubic"])} end % Function code % Return cell arrays xCell = x; yCell = y; optionCell = option; end
入力なし、または 3 の倍数回入力を指定してこの関数を呼び出すことができます。MATLAB® は、各引数に対して、その引数に渡されるすべての値を含む cell 配列を作成します。次の fRepeat
の呼び出しでは、3 つの繰り返し引数が 2 セット渡されます。
[xCell,yCell,optionCell] = fRepeat(1,2,"linear",3,4,"cubic")
xCell = 1×2 cell array {[1]} {[3]} yCell = 1×2 cell array {[2]} {[4]} optionCell = 1×2 cell array {["linear"]} {["cubic"]}
次の関数は、Repeating
arguments
ブロック内で x
と y
の入力に繰り返し引数を受け入れます。この関数の本体において、繰り返し引数として指定された値は cell 配列 x
および y
で使用できます。この例では、plot(x1,y1,…)
のように x
および y
の値を交互に配置して、関数 plot
に必要な入力に一致させています。
function myPlotRepeating(x,y) arguments (Repeating) x (1,:) double y (1,:) double end % Function code % Interleave x and y z = reshape([x;y],1,[]); % Call plot function if ~isempty(z) plot(z{:}); end end
引数の繰り返しのペアを指定して、この関数を呼び出します。
x1 = 1:10; y1 = sin(x1); x2 = 0:5; y2 = sin(x2); myPlotRepeating(x1,y1,x2,y2)
繰り返し引数に varargin
を使用しない
引数検証を使用する関数で varargin
を使用することは推奨されません。varargin
のサイズとクラスが繰り返し arguments ブロック内で制限されている場合、この制限は varargin
のすべての値に適用されます。
レガシ コードをサポートするために varargin
を使用する場合、これは Repeating
arguments
ブロック内の唯一の引数でなければなりません。
たとえば、次の関数は 2 つの必須の位置引数に加えて、varargin
を繰り返し引数として定義します。
function f(a, b, varargin) arguments a uint32 b uint32 end arguments (Repeating) varargin end % Function code ... end