我正在尝试理解 Matlab inputParser
,从以前的问题看来,人们认为使用此类来验证函数的输入是最佳实践。因此,我在玩弄它,并编写了以下函数。
function output = inputParseTester(reqArg, varargin)
parser = inputParser;
addRequired(parser, 'reqArg')
addOptional(parser, 'posArg', NaN)
addParameter(parser, 'kwArg', NaN)
parse(parser, reqArg, varargin{:})
reqArg = parser.Results.reqArg;
posArg = parser.Results.posArg;
kwArg = parser.Results.kwArg;
output = {reqArg, posArg, kwArg};
end
鉴于前面的函数,为什么当我输入一个数值时位置参数被接受,但是当它作为一个或数组输入时为什么posArg
不被接受?此时我还没有定义任何验证函数,我可能想成为一个非数字变量,对吧?string
char
posArg
>> inputParseTester('arg1', 2, 'kwArg', 2)
ans =
1×3 cell array
{'arg1'} {[2]} {[2]}
>> inputParseTester('arg1', 'posArg', 'arg2', 'kwArg', 2)
ans =
1×3 cell array
{'arg1'} {'arg2'} {[2]}
>> inputParseTester('arg1', 'arg2', 'kwArg', 2)
Error using inputParseTester (line 7)
The argument 'arg2' is a string scalar or character vector and does not match any parameter names. It failed validation for the argument 'posArg'.
鉴于此结果,我认为这addOptional
与 相同addParameter
,只是添加了一些不需要的和未定义的验证。这可能不是这种情况,那么发生了什么?