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

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

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

| | |

Для просмотра документации необходимо авторизоваться на сайте