有时,在定义函数时,输入参数的数量是未知的。举个例子,想象一个函数,它返回所有输入参数中的最小值。例如:
a = smallest (1, 2, 3); b = smallest (1, 2, 3, 4);
在这个例子中,a和b都将等于 1。编写smallest函数的一种方法是:
function val = smallest (arg1, arg2, arg3, arg4, arg5) body endfunction
然后使用nargin的值来确定应考虑哪些输入参数。这种方法的问题在于它只能处理有限数量的输入参数。
如果特殊参数名称varargin出现在函数参数列表的末尾,则表示该函数接受可变数量的输入参数。使用varargin后,函数看起来是这样的:
function val = smallest (varargin) body endfunction
在函数体中,可以通过变量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, …) ¶返回params中直到第一个字符串元素的元胞元素到reg中,并将从第一个字符串元素开始的所有剩余元素返回到prop中。
例如:
[reg, prop] = parseparams ({1, 2, "linewidth", 10})
reg =
{
[1,1] = 1
[1,2] = 2
}
prop =
{
[1,1] = linewidth
[1,2] = 10
}
parseparams 函数可用于将常规数值参数与以varargin元胞数组中属性/值对形式提供的附加参数分离开来。
在第二种调用形式中,可用选项直接与其默认值一起以名称-值对的形式指定。如果params不构成名称-值对,或者出现与任何可用选项都不匹配的选项,则会引发错误。
当从 m 文件函数调用时,错误消息会带有调用函数名称的前缀。
选项的匹配不区分大小写。
另请参阅: varargin,inputParser。
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-4