How to set mutually exclusive arguments in matlab?

8 views (last 30 days)
How to use the new "arguments" parameter qualifier to control mutually exclusive two(or more) parameters as function inputs?
for example:
function out = twoStats(x,y)
arguments
% If you have input x, you cannot input y
% If you have input y, you cannot input x
end
end
similar question:
  1 Comment
Jon
Jon on 16 Nov 2020
I have been looking through the documentation. It appears that the input validation only operates on a single argument at a time. I don't see any mechnisim for making the validation of one input dependent upon another, e.g. must be empty if b is not empty. Obviously you could check this yourself, but I understand that you want to use the new argument feature to do this

Sign in to comment.

Accepted Answer

Bruno Luong
Bruno Luong on 16 Nov 2020
function out = twoStats(x,y)
arguments
x = [];
y {MustBeExclusive(x,y)} = [];
end
% out = ...
end
function MustBeExclusive(varargin)
if sum(cellfun('isempty',varargin)) ~= 1
eid = 'XY:NotExclusive';
msg = 'X and Y must be exclusive.';
throwAsCaller(MException(eid,msg))
end
end
  3 Comments
Steven Lord
Steven Lord on 17 Nov 2020
>> twoStats([], 5) % x is the "placeholder" empty []
ans =
5
>> twoStats(1, []) % y is empty
ans =
[]
>> twoStats(1) % specify only x, let y take on its default value
ans =
[]
>> twoStats(1, 2) % neither is empty, this is not valid
Error using twoStats
Invalid argument at position 2. X and Y must be exclusive.
I would consider what the condition in MustBeExclusive should be carefully. If specifying both x and y as empties is allowed you should use == 0 instead of ~= 1. Should the following work? Currently it does not.
>> twoStats([], [])
Error using twoStats
Invalid argument at position 2. X and Y must be exclusive.

Sign in to comment.

More Answers (0)

Categories

Find more on Entering Commands in Help Center and File Exchange

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!