inputparser fails to accept correct value

7 vues (au cours des 30 derniers jours)
xCuse
xCuse le 18 Août 2019
Commenté : xCuse le 18 Août 2019
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
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 Help Center et File Exchange

Produits


Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by