fefe
fefe

Reputation: 3442

How to check whether an argument is supplied in function call?

Say that I have a function, dummy, with 2 arguments. The arguments can have default values when not supplied in function call. But how do I know is an arguments is not supplied?

I know I can use nargin, like this

function dummy(arg1, arg2)
if nargin < 2
    arg2 = 0;
end
if nargin < 1
    arg1 = 0;
end
% function body

I want to know whether I can check whether an arguments is supplied based on the argument name? Something like supplied(arg2) == false.

I ask this because, sometimes I want to add new arguments at the front of the argument list (as it may not have a default value), and then I have to change all the if nargin .... If I can check by name, nothing has to be changed.

Upvotes: 41

Views: 33209

Answers (1)

Oli
Oli

Reputation: 16065

I always do like that:

if ~exist('arg1','var')
  arg1=0;
end

As said by @Andrey, with this solution you can change the number/order of the arguments of the function, without changing the code. This is not the case with the nargin solution.

As said by @yuk, if you want to allow to skip arguments you can do:

if ~exist('arg1','var') || isempty(arg1)
  arg1=arg1DefaultValue;
end

Upvotes: 71

Related Questions