Misunderstanding InputParser Validation Behavior

2 views (last 30 days)
I seem to be confused as to the proper implementation of the inputParser when it comes to input validation. Consider the following function:
function out = testInputParser(varargin)
ip = inputParser;
ip.addParameter('x', [], @double);
ip.parse(varargin{:});
out = ip.Results.x;
end
These cases work as expected:
% Should pass:
>> testInputParser('x', 123)
ans =
123
% Should fail:
>> testInputParser('x', '123')
Error using testInputParser (line 5)
The value of 'x' is invalid. It must satisfy the function:
double.
...But then why do these cases NOT work?
% Expected to pass, but fails
testInputParser('x', -123)
Error using testInputParser (line 5)
The value of 'x' is invalid. It must satisfy the function:
double.
% Expected to fail, but passes
>> testInputParser('x', 'a')
ans =
a
I can avoid some of this heartburn by using @isnumeric for my input validator, but I also want to ensure I've got doubles and not, say, int16 values coming in.
So, this seems like strange behavior to me. What am I missing?

Accepted Answer

Walter Roberson
Walter Roberson on 25 May 2018
@double is not an input validation function: it just takes the input and converts to double datatype. Whatever test is being done internally appears to accept positive results from the validation function.
You should be using a validation function such as @(x) isa(x, 'double') or @isfloat if single precision is also acceptable.
  1 Comment
H.A. Camp
H.A. Camp on 26 May 2018
Ah, of course! Thanks, Walter, for your patience with such a simple problem. :) Somehow, I fooled myself into thinking that the act of type conversion would inherently perform the check when that's not really what it's intended for.
Much appreciated!

Sign in to comment.

More Answers (0)

Categories

Find more on Argument Definitions in Help Center and File Exchange

Products


Release

R2015b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!