Main Content

验证重复参量

重复参量是可以重复指定为参量的位置参量。在包含 Repeating 属性的 arguments 代码块中声明重复参量。

arguments (Repeating)
    arg1
    arg2
    ...
end

函数可以有一个 Repeating arguments 块用于输入,一个块用于输出。一个 Repeating 输入参量块可以包含一个或多个重复参量,而一个 Repeating 输出参量块只能包含一个重复参量。

如果函数定义了 Repeating arguments 代码块,则调用该函数时,此代码块中的参量可以一次也不出现,也可以全体出现一次或多次。如果对函数的调用包含重复参量,则每次重复都必须包含 Repeating arguments 代码块中的所有参量。

例如,如果 Repeating arguments 块定义输入参量 xy,则每次重复必须同时包含 xy

重复输入参量不能指定默认值,因此不能为可选项。但是,您可以不带任何重复参量调用函数。

重复输入参量在函数中的声明顺序必须在位置参量之后、名称-值参量之前。您不能在 Repeating 代码中指定名称-值参量。有关名称-值参量的信息,请参阅验证名称-值参量

在函数中,每个重复参量构成一个元胞数组,其中包含的元素数等于在函数调用中传递的重复次数。验证应用于该元胞数组的每个元素。如果调用函数时该参量的出现次数为零,则元胞数组的大小为 1×0。也就是说,它为空。

例如,以下函数声明一个重复参量代码块,其中包含三个参量 xyoption

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 代码块,从而允许重复输入参量 xy。在函数体中,指定为重复参量的值包含在元胞数组 xy 中。此示例交错 xy 中的值,以匹配 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

另请参阅

|

相关主题