使用`inputParser`类验证默认参数

时间:2016-01-20 15:15:07

标签: matlab arguments

Matlab中的inputParser类对于在调用某个函数时综合检查用户传递的参数非常有用。例如:

function [] = TestValidation(varargin)
%[
    p = inputParser();
    p.addParameter('Toto', 'Hello', @isnumeric);

    p.parse(varargin{:});
%]
end

如果用户尝试为参数Toto分配非数值,则会引发错误(例如TestValidation('Toto', 'Hello') ==>引发错误,因为Hello不是数字)。

无论如何调用上面没有参数的函数(即TestValidation()),即使Toto的默认值是一个字符串(即Hello),也不会引发错误。

是否有一种简单的方法可以强制inputParser验证的默认值,还是只能手动完成 a posteriori

1 个答案:

答案 0 :(得分:2)

这是一个类,创建一个实现所需功能的子类:

classdef myInputParser<inputParser
    methods
        function addParamValue(obj,name,default,fcn,varargin)
            assert(fcn(default));
            addParamValue@inputParser(obj,name,default,fcn,varargin{:});
        end
    end 
end

>> p = myInputParser();
>> p.addParamValue('Toto', 'Hello', @isnumeric);
Error using myInputParser/addParamValue
(line 4)
Assertion failed.