Checking Number of Arguments in Nested Functions
This topic explains special considerations for using varargin, varargout, nargin,
and nargout with nested functions.
varargin and varargout allow
you to create functions that accept variable numbers of input or output
arguments. Although varargin and varargout look
like function names, they refer to variables, not functions. This
is significant because nested functions share the workspaces of the
functions that contain them.
If you do not use varargin or varargout in
the declaration of a nested function, then varargin or varargout within
the nested function refers to the arguments of an outer function.
For example, create a function in a file named showArgs.m that
uses varargin and has two nested functions, one
that uses varargin and one that does not.
function showArgs(varargin) nested1(3,4) nested2(5,6,7) function nested1(a,b) disp('nested1: Contents of varargin{1}') disp(varargin{1}) end function nested2(varargin) disp('nested2: Contents of varargin{1}') disp(varargin{1}) end end
Call the function and compare the contents of varargin{1} in
the two nested functions.
showArgs(0,1,2)
nested1: Contents of varargin{1}
0
nested2: Contents of varargin{1}
5On the other hand, nargin and nargout are
functions. Within any function, including nested functions, calls
to nargin or nargout return
the number of arguments for that function. If a nested function requires
the value of nargin or nargout from
an outer function, pass the value to the nested function.
For example, create a function in a file named showNumArgs.m that
passes the number of input arguments from the primary (parent) function
to a nested function.
function showNumArgs(varargin) disp(['Number of inputs to showNumArgs: ',int2str(nargin)]); nestedFx(nargin,2,3,4) function nestedFx(n,varargin) disp(['Number of inputs to nestedFx: ',int2str(nargin)]); disp(['Number of inputs to its parent: ',int2str(n)]); end end
Call showNumArgs and compare the output of nargin in
the parent and nested functions.
showNumArgs(0,1)
Number of inputs to showNumArgs: 2 Number of inputs to nestedFx: 4 Number of inputs to its parent: 2