Using nargin in functions

3 views (last 30 days)
Aleksandar
Aleksandar on 20 Sep 2011
Hi all,
For simplicity say I have the following function:
function c = sum1(a, b)
if nargin < 2, b = 3; end
c = a+b;
and I want to use this function in another one:
function c = sum2(a, b)
a = 2*a;
c = sum1(a, b)
and if I try to execute for example sum2(1) it will give me an error that b is not defined. I know that it can be fixed by including the nargin line in the sum2 function instead of the sum1, but what if the sum1 function is used quite often in other functions as well? Should I include the nargin line in every parent function in which I am using sum1? Isn't it more practical to write it only once in sum1 and matlab returns an error if there isn't any nargin in sum1? Is there another way to do this?
Thanks in advance.

Accepted Answer

Jan
Jan on 20 Sep 2011
Another method would be to use VARARGIN:
function c = sum1(a, b)
if nargin < 2, b = 3; end
c = a+b;
function c = sum2(a, varargin)
a = 2*a;
c = sum1(a, varargin{:})
But this is prone to errors, if you call sum2 with 3 inputs. Therefore I prefer using NARGIN if a function is called with a different number of inputs.

More Answers (1)

Tigersnooze
Tigersnooze on 20 Sep 2011
Your problem is that sum2 doesn't know what to do when b is not defined--as you said, this can be solved by putting in the nargin line.
function c = sum1(a, b)
if nargin < 2
b = 3;
end
c = a + b;
function c = sum2(a, b)
if nargin < 2
b = whatever you want;
end
c = sum1(a, b);
The issue here is that your parent function (sum2) is not capable to taking fewer than 2 inputs, not that sum1 is incapable.
  1 Comment
Aleksandar
Aleksandar on 21 Sep 2011
Yes, I already said that I am aware of the problem and that the nargin line in sum2 will fix it, thus making the nargin line in sum1 redundant. Thanks anyway.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!