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

Adam Danz
Adam Danz 2019년 8월 18일
Test2() is a different function than Test(). Was it a typo?
xCuse
xCuse 2019년 8월 18일
yes sorry it was a typo

댓글을 달려면 로그인하십시오.

 채택된 답변

Adam Danz
Adam Danz 2019년 8월 18일
편집: Adam Danz 2019년 8월 18일

0 개 추천

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

xCuse
xCuse 2019년 8월 18일
Thank you very much, that solved it for me!
Adam Danz
Adam Danz 2019년 8월 18일
편집: Adam Danz 2019년 8월 18일
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 2019년 8월 18일
Tyvm, every simplification is welcome! :)

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Argument Definitions에 대해 자세히 알아보기

제품

릴리스

R2019a

태그

질문:

2019년 8월 18일

댓글:

2019년 8월 18일

Community Treasure Hunt

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

Start Hunting!

Translated by