matlab - 在 Matlab 中,为什么输入解析器会使位置参数无效,即使没有设置验证函数?
问题描述
我正在尝试理解 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
,只是添加了一些不需要的和未定义的验证。这可能不是这种情况,那么发生了什么?
解决方案
虽然绝不是直观的,但您会观察到记录的行为:
对于可选字符串参数,请指定验证函数。如果没有验证函数,输入解析器会将字符串参数解释为无效的参数名称并引发错误。
https://mathworks.com/help/matlab/ref/inputparser.addoptional.html
推荐阅读
- python - 在处理请求时,我的套接字服务器如何与主线程上的终端交互?
- javascript - 向原型函数发送参数
- gradle - 从 3.1 迁移到 5.1 时出现 GRADLE 错误
- python - 卡在从页面中提取标题和下一页 url
- python - 重复二维数组的行
- kotlin - Accessing outer scope with qualified this in extension functions for inner classes
- android - Placing points randomly on a 2D board
- nginx - 如何将 WAN https 流量重定向到(本地)http 套接字?
- hyperledger-fabric - Hyperledger Fabric 和 Composer 隐私支持 - 完整场景
- linq - EF Core 2 - 如何调用标量函数?