Main Content

繰り返し引数の検証

繰り返し引数は、引数として繰り返し指定可能な位置引数です。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 を定義する場合は、それぞれの繰り返しに xy の両方が含まれていなければなりません。

繰り返し入力引数は既定値を指定できないため、オプションにはできません。ただし、繰り返し引数を含めずに関数を呼び出すことはできます。

関数では、繰り返し入力引数を位置引数の後に、かつ名前と値の引数の前に宣言しなければなりません。名前と値の引数は Repeating ブロック内で指定できません。名前と値の引数の詳細については、名前と値の引数の検証を参照してください。

関数内で、各繰り返し引数は、関数呼び出しで渡される繰り返しの数と等しい数の要素をもつ cell 配列になります。cell 配列の各要素に検証が適用されます。この引数の使用を 0 に指定して関数を呼び出すと、cell 配列のサイズは 1 行 0 列になります。つまり、これは空になります。

たとえば、次の関数では 3 つの繰り返し引数 xy、および 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 ブロック内で xy の入力に繰り返し引数を受け入れます。この関数の本体において、繰り返し引数として指定された値は 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

参考

|

関連するトピック