Using nargin in functions
3 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Jan
2011-9-20
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 个评论
更多回答(1 个)
Tigersnooze
2011-9-20
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.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!