Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

varargout

可变长度的输出参数列表

语法

说明

示例

varargout 是函数定义语句中的一个输出变量,允许函数返回任意数量的输出参数。使用小写字符指定 varargout,将其作为最后一个输出参数附加在任何显式声明的输出后。

在执行此函数时,varargout 是一个 1×N 元胞数组,其中 N 是显式声明的输出结果后请求的输出数量。在函数内部,varargout 是一个未初始化且未预分配的变量。

示例

全部展开

在名为 returnVariableNumOutputs.m 的文件中定义一个函数,它返回一个输出大小向量 s 和可变数目的附加输出。

type returnVariableNumOutputs
function [s,varargout] = returnVariableNumOutputs(x)
    nout = max(nargout,1) - 1;
    s = size(x);
    for k = 1:nout
        varargout{k} = s(k);
    end
end

输出 s 含有输入数组 x 的维数。其他输出项对应于 s 中的个别维数。

使用三维数组调用该函数并请求三个输出。

A = rand(4,5,2);
[s,rows,cols] = returnVariableNumOutputs(A)
s = 1×3

     4     5     2

rows = 4
cols = 5

使用四维数组再次调用该函数并请求四个输出。这次函数不返回第四维。

A = zeros(1,4,5,2);
[s,dim1,dim2,dim3] = returnVariableNumOutputs(A)
s = 1×4

     1     4     5     2

dim1 = 1
dim2 = 4
dim3 = 5

A 再次调用该函数,并请求一个输出。现在函数返回 A 的维数,而不是 varargout

s = returnVariableNumOutputs(A)
s = 1×4

     1     4     5     2

在名为 variableNumInputAndOutput.m 的文件中定义一个函数,它接受可变数目的输入和输出。

type variableNumInputAndOutput
function varargout = variableNumInputAndOutput(varargin)
    disp(['Number of provided inputs: ' num2str(length(varargin))])
    disp(['Number of requested outputs: ' num2str(nargout)])
    
    for k = 1:nargout
        varargout{k} = k;
    end
end

使用两个输入和三个输出调用该函数。

[d,g,p] = variableNumInputAndOutput(6,'Nexus')
Number of provided inputs: 2
Number of requested outputs: 3
d = 1
g = 2
p = 3

不使用任何输入和输出再次调用该函数。

variableNumInputAndOutput
Number of provided inputs: 0
Number of requested outputs: 0

在工作文件夹中的某个文件中,为绘制红线的 plot 函数创建封装程序。redplot 函数接受可变长度的输入参数列表,并返回可变长度的输出参数列表。它将线条颜色设置为红色,并将其他输入值转发给 plot 函数。此函数封装程序允许您向 redplot 传递与 plot 相同的输入,而不用将线条颜色指定为红色。

type redplot.m
function varargout = redplot(varargin)
    [varargout{1:nargout}] = plot(varargin{:},'Color',[1,0,0]);
end

使用 redplot 创建一个线图。

x = 0:pi/100:2*pi;
y = sin(x);
redplot(x,y)

Figure contains an axes. The axes contains an object of type line.

再次调用 redplot,并指定转发给 plot 函数的输入参数和输出参数。

h = redplot(x,y,'Marker','o','MarkerEdgeColor','green'); 

Figure contains an axes. The axes contains an object of type line.

扩展功能

在 R2006a 之前推出