Необязательные аргументы в функциях MATLAB - PullRequest
58 голосов
/ 20 июля 2011

Как мне объявить функцию в MATLAB с необязательными аргументами?

Например: function [a] = train(x, y, opt), где opt должен быть необязательным аргументом.

Ответы [ 3 ]

46 голосов
/ 10 октября 2012

Простой способ сделать это - через nargin (N аргументов в). Недостатком является то, что вы должны убедиться, что ваш список аргументов и проверки подлинности совпадают.

Стоит помнить, что все входные данные являются необязательными, но функции завершатся с ошибкой, если вызовет переменную, которая не установлена. В следующем примере устанавливаются значения по умолчанию для b и c. Завершится, если нет.

function [ output_args ] = input_example( a, b, c )
if nargin < 1
  error('input_example :  a is a required input')
end

if nargin < 2
  b = 20
end

if nargin < 3
  c = 30
end
end
42 голосов
/ 20 июля 2011

Есть несколько вариантов, как это сделать.Самое основное - это использовать varargin, а затем использовать nargin, size и т. Д., Чтобы определить, были ли переданы необязательные аргументы в функцию.

% Function that takes two arguments, X & Y, followed by a variable 
% number of additional arguments
function varlist(X,Y,varargin)
   fprintf('Total number of inputs = %d\n',nargin);

   nVarargs = length(varargin);
   fprintf('Inputs in varargin(%d):\n',nVarargs)
   for k = 1:nVarargs
      fprintf('   %d\n', varargin{k})
   end

Немного более элегантное решение - использовать класс inputParser для определения всех аргументов, ожидаемых вашей функцией, как обязательных, так и необязательных.inputParser также позволяет выполнять проверку типов для всех аргументов.

37 голосов
/ 23 марта 2013

Хороший способ сделать это - не использовать nargin, а проверить, установлены ли переменные с помощью exist('opt', 'var').

Пример:

function [a] = train(x, y, opt)
    if (~exist('opt', 'var'))
        opt = true;
    end
end

См. Этот ответ для профессионалов, делающих это следующим образом: Как проверить, указан ли аргумент в вызове функции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...