11.6可变长度参数列表

有时,在定义函数时,输入参数的数量是未知的。举个例子,想象一个函数,它返回所有输入参数的smallesto。例如

a = smallest (1, 2, 3);
b = smallest (1, 2, 3, 4);

在这个例子中ab将是1。编写的一种方法smallest函数为

函数val=最小(arg1、arg2、arg3、arg4、arg5)body结束函数

然后使用的值nargin以确定应考虑哪些inputarguments。这种方法的问题在于它只能处理有限数量的输入参数。

如果特殊参数名称varargin出现在函数参数列表的末尾,表示该函数采用可变数量的输入参数。使用varargin函数看起来是这样的

函数val=最小(varargin)body结束函数

在函数体中,可以通过变量访问输入参数varargin。此变量是包含所有输入参数的元胞数组。详见元胞数组,了解有关使用元胞数组的详细信息。这个smallest函数现在可以这样定义

function val = smallest (varargin)
  val = min ([varargin{:}]);
endfunction

这个实现可以处理任意数量的输入参数,但它也是一个非常简单的问题解决方案。

稍微复杂一点的例子varargin是一个函数print_arguments打印所有输入参数。这样的函数可以这样定义

function print_arguments (varargin)
  for i = 1:length (varargin)
    printf ("Input argument %d: ", i);
    disp (varargin{i});
  endfor
endfunction

此函数返回如下输出

print_arguments (1, "two", 3);
     -| Input argument 1:  1
     -| Input argument 2: two
     -| Input argument 3:  3
 
:[reg,prop] = parseparams (params)
:[reg,var1, …] = parseparams (params,name1,default1, …)

返回reg的元胞元素param直到第一个字符串元素,并且在prop从第一个字符串元素开始的所有剩余元素。

例如

[reg, prop] = parseparams ({1, 2, "linewidth", 10})
reg =
{
  [1,1] = 1
  [1,2] = 2
}
prop =
{
  [1,1] = linewidth
  [1,2] = 10
}

sparseparams函数可用于将常规数值参数与作为的属性/值对提供的附加参数分开varargin元胞数组。

在调用的第二种形式中,直接指定可用参数,并将其默认值作为名称-值对。如果params不要形成名称-值对,或者如果出现与任何可用参数都不匹配的参数,则会发生错误。

从m文件函数调用时,错误的前缀是调用方函数的名称。

参数的匹配不区分大小写。

详见: varargin,inputParser.

广告

版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2