在 Matlab 中,为什么输入解析器会使位置参数无效,即使没有设置验证函数?
In Matlab, Why does the input parser invalidate positional arguments, even when no validation functions are set?
我正在尝试理解 Matlab inputParser
,从之前的问题看来,人们认为最好的做法是使用此 class 来验证函数的输入。因此,我稍微玩弄了一下,并编写了以下函数。
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
的作用相同,只是添加了一些不需要的和未定义的验证。这可能不是这种情况,所以发生了什么?
虽然绝不是直观的,但您观察到记录的行为:
For optional string arguments, specify a validation function. Without
a validation function, the input parser interprets a string argument
as an invalid parameter name and throws an error.
https://mathworks.com/help/matlab/ref/inputparser.addoptional.html
我正在尝试理解 Matlab inputParser
,从之前的问题看来,人们认为最好的做法是使用此 class 来验证函数的输入。因此,我稍微玩弄了一下,并编写了以下函数。
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
的作用相同,只是添加了一些不需要的和未定义的验证。这可能不是这种情况,所以发生了什么?
虽然绝不是直观的,但您观察到记录的行为:
For optional string arguments, specify a validation function. Without a validation function, the input parser interprets a string argument as an invalid parameter name and throws an error.
https://mathworks.com/help/matlab/ref/inputparser.addoptional.html