Проверка количества аргументов в вложенных функциях

В этом разделе описываются особые факторы по использованию 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

См. также

| | |