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?
Best Answer