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