В этом разделе поясняются особенности использования varargin, varargout, nargin, и nargout с вложенными функциями.
varargin и varargout позволяют создавать функции, которые принимают переменные числа входных или выходных аргументов. Хотя varargin и varargout выглядят как имена функций, они ссылаются на переменные, а не на функции. Это важно, поскольку вложенные функции совместно используют рабочие области функций, которые их содержат.
Если вы не используете varargin или varargout в объявлении вложенной функции, то varargin или varargout внутри вложенной функции относится к аргументам внешней функции.
Например, создайте функцию в файле с именем showArgs.m который использует varargin и имеет две вложенные функции, одна из которых использует varargin и тот, который этого не делает.
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
Вызовите функцию и сравните содержимое varargin{1} в двух вложенных функциях.
showArgs(0,1,2)
nested1: Contents of varargin{1}
0
nested2: Contents of varargin{1}
5С другой стороны, nargin и nargout являются функциями. В рамках любой функции, включая вложенные функции, вызывает nargin или nargout возвращает количество аргументов для этой функции. Если вложенная функция требует значения nargin или nargout из внешней функции передайте значение вложенной функции.
Например, создайте функцию в файле с именем showNumArgs.m передает число входных аргументов из основной (родительской) функции вложенной функции.
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
Звонить showNumArgs и сравнить выходные данные nargin в родительских и вложенных функциях.
showNumArgs(0,1)
Number of inputs to showNumArgs: 2 Number of inputs to nestedFx: 4 Number of inputs to its parent: 2