Function Argument Validation, Compare to Irrational Number or Expression
    10 次查看(过去 30 天)
  
       显示 更早的评论
    
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). 
0 个评论
采纳的回答
  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 个评论
  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 Center 和 File Exchange 中查找有关 Argument Definitions 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

