Using nargin in functions
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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.
0 commentaires
Réponse acceptée
Jan
le 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.
0 commentaires
Plus de réponses (1)
Tigersnooze
le 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.
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!