Misunderstanding InputParser Validation Behavior

5 vues (au cours des 30 derniers jours)
H.A. Camp
H.A. Camp le 25 Mai 2018
Commenté : H.A. Camp le 26 Mai 2018
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?

Réponse acceptée

Walter Roberson
Walter Roberson le 25 Mai 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 commentaire
H.A. Camp
H.A. Camp le 26 Mai 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!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Argument Definitions dans Help Center et File Exchange

Produits


Version

R2015b

Community Treasure Hunt

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

Start Hunting!

Translated by