Misunderstanding InputParser Validation Behavior
4 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
H.A. Camp
il 25 Mag 2018
Commentato: H.A. Camp
il 26 Mag 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?
0 Commenti
Risposta accettata
Walter Roberson
il 25 Mag 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.
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Argument Definitions in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!