inputparser fails to accept correct value

조회 수: 7 (최근 30일)
xCuse
xCuse 2019년 8월 18일
댓글: xCuse 2019년 8월 18일
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일
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
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개)

카테고리

Help CenterFile Exchange에서 Argument Definitions에 대해 자세히 알아보기

태그

제품


릴리스

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by