一种特别的输入参数varargin 可以在自定义函数中得到,这种函数支持输入参数的变量的个数。这个参数显在输入参数列表的最后一项,它返回一个单元阵列,所以一个输入实参可以包括任意数目的实参。每一个实参都变成了由varagin 返回的单元阵列元素。如果它被应用,varagin 必须是函数中的最后一个输入参数。
varargin
【功能描述】返回函数输入参数列表长度
【函数描述】function y=bar(varargin):得到函数输入参数列表长度,varargin函数仅用于函数m文件内。
varargin参数位于函数输入参数列表的末尾,varargin必须小写。
【函数实例】新建一个名为lxyhds.m的函数,函数代码如下:
function lxyhds(argA, argB, varargin) %lxyhds为自己起的任意一个函数名字
optargin=size(varargin,2);%获取可选参数数目 nargin为系统变量,返回函数参数数目,此处返回除了可选变量之外的变 量数目
stdargin=nargin - optargin; %传入参数至少有argA时才输出argA
if stdargin >= 1 fprintf(' %d\n', argA)
end
%传入参数有argB时输出argB
if stdargin == 2
fprintf(' %d\n', argB)
end
%size(varargin,2)返回可选参数个数,此处输出可选参数列表
for k= 1 : size(varargin,2)
fprintf(' %d\n', varargin{k})
end
end
例如,写了一个函数:function test(varargin)
那么在这个函数里,varargin就是一个cell数组,它包含了用户输入的参数。下面是一个例子:
function test(varargin)
disp(['nargin is ' num2str(nargin)]);
for v=1:numel(varargin)
disp(['varargin{' num2str(v) '} class is ' class(varargin{v})]);
end
完全就是使用cell数组的方法来处理用户输入的个数不定的参数,如果我们这样调用这个函数:
>> test()
会得到结果:
nargin is 0
表示用户输入参数个数为0个,就是没有输入参数。
如果这样调用:
>> test(1,'a',uint8(32),'123456');
会得到结果:
nargin is 4
varargin{1} class is double
varargin{2} class is char
varargin{3} class is uint8
varargin{4} class is char
表示用户输入了4个参数,第一个是double类型,第二个是char类型,第三个是uint8类型,第四个也是char类型。
也就是说,只要把函数的参数列表的最后一个参数写成varargin,就可以在函数内部以访问cell数组的方式来获取可变参数的信息。