inputparser fails to accept correct value

I'm currently trying to get the inputparser for my function to work. My code looks like this:
function [] = Test2 (BW,varargin)
defMethod = 2;
p = inputParser;
validImage = @(x) islogical(x);
addRequired(p,'BW',validImage);
addParameter(p,'method',defMethod,@(x) isinteger(x) && (x<3) && (x>0));
parse(p,BW,varargin{:});
Running this codes yields the following result:
Test2(BW,'method',1);
The value of 'method' is invalid. It must satisfy the function: @(x)isinteger(x)&&(x<3)&&(x>0).
Does anyone know what is causing this behaviour?
Ty for your help!

2 commentaires

Adam Danz
Adam Danz le 18 Août 2019
Test2() is a different function than Test(). Was it a typo?
xCuse
xCuse le 18 Août 2019
yes sorry it was a typo

Connectez-vous pour commenter.

 Réponse acceptée

Adam Danz
Adam Danz le 18 Août 2019
Modifié(e) : Adam Danz le 18 Août 2019
isinteger(1) % = FALSE
This matlab function (which often causes confusion) does not determine if the input has an integer value. It determines if the intput is an interger-type (int8, int16, etc...). The input 1 is of class double, not integer-type.
If you need to determine if the input is an integer value,
@(x) mod(x,1)==0 && (x<3) && (x>0));

3 commentaires

xCuse
xCuse le 18 Août 2019
Thank you very much, that solved it for me!
Adam Danz
Adam Danz le 18 Août 2019
Modifié(e) : Adam Danz le 18 Août 2019
Also, this
validImage = @(x) islogical(x);
addRequired(p,'BW',validImage);
can be simplified to this
addRequired(p,'BW',@islogical);
but if you want to accept true, false, 1, 0,
validImage = @(x) islogical(x) || (isnumeric(x) && ismember(x,[0,1]));
addRequired(p,'BW',validImage);
xCuse
xCuse le 18 Août 2019
Tyvm, every simplification is welcome! :)

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Argument Definitions dans Centre d'aide et File Exchange

Produits

Version

R2019a

Question posée :

le 18 Août 2019

Commenté :

le 18 Août 2019

Community Treasure Hunt

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

Start Hunting!

Translated by