Function Argument Validation, Compare to Irrational Number or Expression

조회 수: 5 (최근 30일)
Toder
Toder 2020년 4월 28일
댓글: Adam Danz 2020년 4월 29일
Is there a way to use MATLAB's built-in validation functions to compare an argument to an expression or funciton output?
I want to do the following:
function out = myfun(x)
arguments
x (1,1) double {mustBeGreaterThan(x,pi)}
end
out = foo;
end
Since pi is a function, which is not allowed in the native validation functions, the above code throws an error. Instead I have to define a custom validation function to compare the argument to pi.
function out = myfun(x)
arguments
x (1,1) double {mustBeGreaterThanPi(x)}
end
out = foo;
end
function mustBeGreaterThanPi(x)
if x <= pi
error('Value must be greater than pi.')
end
end
The validation block cannot pass pi to the custom validation function, so pi must be built into the function. This is a complete pain in the neck if we want to compare, say, ten arguments to ten different irrationals, repeating decimals, or simple expressions; we must define ten custom validation functions, unless we get creative with passing scalars or strings (we could pass c to the validation function where an error is thrown if value <= c*pi, for example).

채택된 답변

Adam Danz
Adam Danz 2020년 4월 28일
편집: Adam Danz 2020년 4월 29일
One solution would be to replace the pi function with a literal;
arguments
x (1,1) double {mustBeGreaterThan(x,3.1415926535897932384626)}
end
or you could use a different form of validation,
function out = jff(x)
assert(x>pi, 'x must be greater than pi')
out = x*2;
end
function out = jff(x)
validateattributes(x,{'double'},{'scalar','>',pi})
out = x*2;
end
  댓글 수: 4
Toder
Toder 2020년 4월 29일
I didn't realize it was that recent. I'll submit a request.
Adam Danz
Adam Danz 2020년 4월 29일
Just an FYI, you can see when a function was first released at the bottom of the documentation page.

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

추가 답변 (0개)

카테고리

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

제품


릴리스

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by