nargin与varnargin

来源:互联网 发布:增值税发票识别软件 编辑:程序博客网 时间:2024/05/22 18:22

在一个m文件中,调用nargin能够返回一个函数的参数数目,例如:

function g=mytest(x,y,z);

n = nargin;

那么n的个数为3。

MATLAB中提供一个函数nargchk来检查参数个数是否符合要求。在说明这个函数的作用之前先简单介绍另一个函数的作用:

error(string);

string是一个字符串,当string不为空时,调用该error的函数终止,输出string的内容;而当string为空时,error不做任何反应。

msg = nargchk(low,high,number);当number小于low时,那么nargchk返回一个“Not enough input parameters”;当number大于high时,那么nargchk返回“Too many input parameters”;当number符合要求时,返回空的字符串。

function g = mytest2(x,y,z)

error(nargchk(2,3,nargin));

那么理论上输入mytest2(1),会输出“Not enough input parameters”;输入mytest2(1,2,3,4),会输出Too many input parameters”;系统内部就是按照这个原理进行系数个数检测的。

另外需要说明的是,高级版本的MATLAB已经使用narginchk代替nargchk。


我们经常会遇到需要编写一个函数,但是其参数数量不能确定,需要根据调用时的实际情况来确定;或者参数的类型是差别很大的,很难统一输出处理;此时在定义的时候使用varnargin便是一个不错的选择。下面通过例子来说明:

function retvar = vartest(varargin)
optargin = size(varargin, 2); % 输入的可变参数的数量,注意和nargin的区别,可以结合下一例子比较
ndims(varargin)%varargin的维度,向量是二维的;a[x][y][z]这个数组时3维的
vararginvarargin得内容
stdargin = nargin - optargin; % nargin是实际参数的总数量
fprintf('Number of inputs: %d\n', nargin);
fprintf('Inputs from individual arguments: %d\n', stdargin)
for k = 1:size(varargin, 2) 
fprintf('%d: %d\n', k, varargin{k});
end
end
>> vartest(1, 2, 3)
ans = 2
varargin = 
[1] [2] [3]
Number of inputs: 3
Inputs from individual arguments: 0
1: 1
2: 2
3: 3
例子2
function vartest_2(arg1, argb, varargin)%注意和上一个函数的参数做比较,这里的可变参数是从第三个开始的,说明调用函数时最少传递2个参数
optargin = size(varargin, 2); 
stdargin = nargin - optargin; 
fprintf('Number of inputs: %d\n', nargin);
fprintf('Inputs from individual arguments: %d\n', stdargin)
for k = 1:size(varargin, 2) 
fprintf('%d: %d\n', k, varargin{k});
end
end
这次我们调用:
>> vartest_2(1, 2, 3)
Number of inputs: 3
Inputs from individual arguments: 2
1: 3


0 0
原创粉丝点击