有时,在定义函数时,输入参数的数量是未知的。举个例子,想象一个函数,它返回所有输入参数的smallesto。例如
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
以确定应考虑哪些inputarguments。这种方法的问题在于它只能处理有限数量的输入参数。
如果特殊参数名称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, …)
¶
返回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