Matlab 输入解析器捕获具有相同前导字符的错误输入

问题描述 投票:0回答:1

此测试函数返回输入的平方,并且在作为名称-值输入提供时可以添加可选的

offset

function out=test_parser(a,varargin)

    % parse inputs
    parser=inputParser;
    parser.KeepUnmatched=true;
    addRequired(parser,'a',@isnumeric);
    addParameter(parser,'offset',0);

    parse(parser,a,varargin{:});
    offset=parser.Results.offset;

    out=a^2+offset;
end
>> test_parser(2)
>> 4
>> test_parser(2,`offset`,1)
>> 5

现在假设我们不提供

offset
,而是提供不同的名称-值输入,其首字母与
offset
相同。由于
parser.KeepUnmatched=true
,这应该被忽略。但它被捕获,就好像它是
offset
,并添加到输出中:

>> test_parser(2,'off',1)
>> 5

这对我来说是一个实际问题,因为在我的代码中,有时我有一个由另一个函数调用的函数,具有相同前导字符的不同输入,应该被忽略。

这似乎是一个严重的错误,因为 matlab 的 inputParser 会捕获任何具有相同前导字符的变量。还是我理解错了?

matlab
1个回答
0
投票

我意识到发生这种情况是因为 Matlab 的 inputParser 默认情况下进行部分匹配。为了防止这种情况,我们需要设置

PartialMatching=false

© www.soinside.com 2019 - 2024. All rights reserved.