解析错误,inputParser家族的功能?

14日视图(30天)
彼得
彼得 2021年2月5日
评论道: 克里斯·拉皮埃尔 2023年5月5日14:18
我偶然发现了肯定在我看来是错误的解析和parseInput套件的功能。似乎与一些字符串作为参数的组合,拥有一个有效的函数适用于检查的有效性参数,并提供了辩论结局的顺序。这可能是简单的代码复制问题:
tryOne = myParse (“α”,“一个”,“β”,“两个”)
tryTwo = myParse (“β”,“两个”,“α”,“一个”)
函数结果= myParse(变长度输入宗量)
parseObj = inputParser;
addOptional (parseObj“α”,“没有”@ (x) (isstring (x) | | ischar (x)));
addOptional (parseObj“β”,“没有”@ (x) (isstring (x) | | ischar (x)));
解析(parseObj变长度输入宗量{:})
结果= parseObj.Results;
结束
注意,第一和第二之间唯一的不同调用“myParse”辩论结局的顺序。这个小测试代码运行在第一种情况下返回错误的结果:
tryOne =
结构体字段:
α:“α”
测试:“两个”
注意“α”设置为字符串“α”而不是被设置为“一”,但“beta”是正确设置。然而,在第二次调用(tryTwo),与参数的顺序颠倒过来,返回正确的结果。
TryTwo =
结构体字段:
α:“一个”
测试:“两个”
顺便说一句,如果我再次运行第一次尝试,它得到答案又错了,所以它不是一个重要的第一次调用解析返回错误的答案。
我试着上面的各种变体,包括数字参数,包括或不包括“addOptional”验证检查功能,其中一些似乎正常工作和一些不喜欢。但这里的例子似乎说明最简单的问题。
解析/ parseInput套件功能内置模板,所以我不能深入这些函数的代码弄清楚这是怎么回事。
5个评论
Stephen23
Stephen23 2021年2月8日
@Peter 从你的评论:我删除了车牌号码。最好不要发布在互联网上。

登录置评。

接受的答案

马特·J
马特·J 2021年2月8日
编辑:马特·J 2021年2月8日
注意,第一和第二之间唯一的不同调用“myParse”辩论结局的顺序。
如果订单是不应该,你应该使用 addParameter 而不是 addOptional ,
tryOne = myParse (“α”,“一个”,“β”,“两个”)
tryOne =结构体字段:
βα:‘一个’:“两个”
tryTwo = myParse (“β”,“两个”,“α”,“一个”)
tryTwo =结构体字段:
βα:‘一个’:“两个”
函数结果= myParse(变长度输入宗量)
parseObj = inputParser;
addParameter (parseObj“α”,“没有”@ (x) (isstring (x) | | ischar (x)));
addParameter (parseObj“β”,“没有”@ (x) (isstring (x) | | ischar (x)));
解析(parseObj变长度输入宗量{:})
结果= parseObj.Results;
结束
4评论
克里斯·拉皮埃尔
克里斯·拉皮埃尔 2023年5月5日14:18
有点晚了些,但想重申,您应该使用addParameter代替addOptional因为你打算把输入的名称-值对,而不是可选的位置参数。

登录置评。

更多的答案(0)

类别

找到更多的在参数定义帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!