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

Эта тема объясняет специальные замечания для использования vararginvarargoutnargin, и 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

Смотрите также

| | |