Validate Repeating Arguments
Repeating arguments are positional arguments that can be specified repeatedly as
arguments. Declare repeating arguments in an arguments
block that includes
the Repeating
attribute.
arguments (Repeating) arg1 arg2 ... end
Functions can have one Repeating
arguments
block for inputs and one for outputs. A
Repeating
input arguments block can contain one or more repeating
arguments, while a Repeating
output arguments block can contain only one
repeating argument.
A function that defines a Repeating
arguments
block can be called with zero or more occurrences of all the
arguments in the block. If a call to a function includes repeating arguments, then all
arguments in the Repeating
arguments
block must be included for each repetition.
For example, if a Repeating
arguments
block defines input arguments x
and
y
, then each repetition must contain both x
and
y
.
Repeating input arguments cannot specify default values and therefore cannot be optional. However, you can call the function without including any repeating arguments.
Functions must declare repeating input arguments after positional arguments and before
name-value arguments. You cannot specify name-value arguments within a
Repeating
block. For information on name-value arguments, see Validate Name-Value Arguments.
In the function, each repeating argument becomes a cell array with the number of elements equal to the number of repeats passed in the function call. The validation is applied to each element of the cell array. If the function is called with zero occurrences of this argument, the cell array has a size of 1-by-0. That is, it is empty.
For example, this function declares a block of three repeating arguments,
x
, y
, and 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
You can call the function with no inputs or multiples of three inputs. MATLAB® creates a cell array for each argument containing all the values passes for that
argument. This call to fRepeat
passes two sets of the three repeating
arguments.
[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"]}
The following function accepts repeating arguments for x
and
y
inputs in a Repeating
arguments
block. In the body of the function, the values specified as
repeating arguments are available in the cell arrays x
and
y
. This example interleaves the values of x
and
y
to match the required input to the plot
function: plot(x1,y1,…)
.
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
Call this function with repeating pairs of arguments.
x1 = 1:10; y1 = sin(x1); x2 = 0:5; y2 = sin(x2); myPlotRepeating(x1,y1,x2,y2)
Avoid Using varargin
for Repeating Arguments
Using varargin
with functions that use argument
validation is not recommended. If varargin
is restricted in size or
class in the repeating arguments block, then the restrictions apply to all values in
varargin
.
If you use varargin
to support legacy code, it must be the only
argument in a Repeating
arguments
block.
For example, this function defines two required positional arguments and
varargin
as the repeating argument.
function f(a, b, varargin) arguments a uint32 b uint32 end arguments (Repeating) varargin end % Function code ... end