我有一个函数,我想通过varargin传递参数,并使用inputParser来确保输入是合理的。有些论据是必需的,有些则不是。这里是一个例子:MATLAB:使用inputParser与varargin
function myFunc(varargin)
p = inputParser;
p.addRequired(...
'numStates', ...
@(x) validateattributes(x, {'numeric'}, ...
{'scalar', 'integer', 'positive'}));
p.addRequired(...
'numInps', ...
@(x) validateattributes(x, {'numeric'}, ...
{'scalar', 'integer', 'positive'}));
p.addRequired(...
'numOuts', ...
@(x) validateattributes(x, {'numeric'}, ...
{'scalar', 'integer', 'positive'}));
p.addRequired(...
'X0', ...
@(x) validateattributes(x, {'numeric'}, ...
{'vector'}));
p.addOptional(...
'freq', 10, ...
@(x) validateattributes(x, {'numeric'}, ...
{'scalar', 'integer', 'positive'}));
p.addOptional(...
'SimulinkVariables', struct(), ...
@(x) isa(x, 'struct'));
p.parse(varargin{:});
%# do stuff with variables
end
我想能够通过参数如下;只要所需的那一对在那里,哪一对都可以通过。因此,示例调用可能是:
myFunc('numStates', 4, 'numInps', 2, 'numOUts', 3, 'X0', [4;0]);
显然,该语法是非法的; parse()预计,它的第一个参数是必需的价值观,但他们不应该被明确命名,即,如:
function myFunc(numStates, numInps, numOuts, X0, varargin)
...
p.parse(numStates, numInps, numOuts, X0, varargin{:});
end
有一个简单的方法,使这个做我想做的,即第一功能?我想最简单的做法是做一些事情来重新排序varargin的元素,并剔除参数名称,但这不是非常优雅。
+1
您正在使用inputParser错误。请参阅@ yuk的答案。 –
2012-02-16 13:36:08
在MATLAB中,使用inputParser可以确保函数的输入参数合理,但当结合varargin使用时,如何处理未命名的必需参数成为一个问题。示例函数myFunc展示了如何定义必需和可选参数,但正常的varargin调用方式不适用。文章探讨了如何优雅地实现功能,使得必需参数可以不被明确命名并与其他可选参数一起传递。
40

被折叠的 条评论
为什么被折叠?



