验证重复参量
重复参量是可以重复指定为参量的位置参量。在包含 Repeating
属性的 arguments
代码块中声明重复参量。
arguments (Repeating) arg1 arg2 ... end
函数可以有一个 Repeating
arguments
块用于输入,一个块用于输出。一个 Repeating
输入参量块可以包含一个或多个重复参量,而一个 Repeating
输出参量块只能包含一个重复参量。
如果函数定义了 Repeating
arguments
代码块,则调用该函数时,此代码块中的参量可以一次也不出现,也可以全体出现一次或多次。如果对函数的调用包含重复参量,则每次重复都必须包含 Repeating
arguments
代码块中的所有参量。
例如,如果 Repeating
arguments
块定义输入参量 x
和 y
,则每次重复必须同时包含 x
和 y
。
重复输入参量不能指定默认值,因此不能为可选项。但是,您可以不带任何重复参量调用函数。
重复输入参量在函数中的声明顺序必须在位置参量之后、名称-值参量之前。您不能在 Repeating
代码中指定名称-值参量。有关名称-值参量的信息,请参阅验证名称-值参量。
在函数中,每个重复参量构成一个元胞数组,其中包含的元素数等于在函数调用中传递的重复次数。验证应用于该元胞数组的每个元素。如果调用函数时该参量的出现次数为零,则元胞数组的大小为 1×0。也就是说,它为空。
例如,以下函数声明一个重复参量代码块,其中包含三个参量 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
调用此函数时,您可以不带输入,也可以将三个输入重复多次。MATLAB® 为每个参量创建一个元胞数组,其中包含为该参量传递的所有值。以下对 fRepeat
的调用将这三个重复参量全体传递了两次。
[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
。在函数体中,指定为重复参量的值包含在元胞数组 x
和 y
中。此示例交错 x
和 y
中的值,以匹配 plot
函数的必需输入: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
使用重复的参量对组来调用此函数。
x1 = 1:10; y1 = sin(x1); x2 = 0:5; y2 = sin(x2); myPlotRepeating(x1,y1,x2,y2)
避免对重复参量使用 varargin
不建议将 varargin
与使用参量验证的函数结合使用。如果 varargin
在重复参量代码块中具有大小或类方面的限制,则这些限制将应用于 varargin
中的所有值。
如果您使用 varargin
支持原有代码,它必须为 Repeating
arguments
代码块中的唯一参量。
例如,此函数定义两个必需位置参量,并将 varargin
定义为重复参量。
function f(a, b, varargin) arguments a uint32 b uint32 end arguments (Repeating) varargin end % Function code ... end