How to set mutually exclusive arguments in matlab?

7 visualizaciones (últimos 30 días)
cui,xingxing
cui,xingxing el 16 de Nov. de 2020
Comentada: cui,xingxing el 17 de Nov. de 2020
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 comentario
Jon
Jon el 16 de Nov. de 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

Iniciar sesión para comentar.

Respuesta aceptada

Bruno Luong
Bruno Luong el 16 de Nov. de 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 comentarios
Steven Lord
Steven Lord el 17 de Nov. de 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.
cui,xingxing
cui,xingxing el 17 de Nov. de 2020
Thanks, great!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Entering Commands en Help Center y File Exchange.

Productos


Versión

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by