Using nargin in functions

3 visualizzazioni (ultimi 30 giorni)
Aleksandar
Aleksandar il 20 Set 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.

Risposta accettata

Jan
Jan il 20 Set 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.

Più risposte (1)

Tigersnooze
Tigersnooze il 20 Set 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 Commento
Aleksandar
Aleksandar il 21 Set 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.

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by