Как я могу объявить функцию в MATLAB с необязательными аргументами?
Например: function [a] = train(x, y, opt)
, где opt должен быть необязательным аргументом.
Есть несколько различных вариантов, как это сделать. Самое главное - использовать 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
также позволяет выполнять проверку типов всех аргументов.
Простой способ сделать это через nargin (N аргументов в). Недостатком является то, что вы должны убедиться, что ваш список аргументов и проверки наргина совпадают.
Следует помнить, что все входы являются необязательными, но функции будут выходить с ошибкой, если она вызывает переменную, которая не задана. В следующем примере устанавливаются значения по умолчанию для b и c. Выйдет, если a нет.
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
Хороший способ обойти это - не использовать nargin
, а проверить, были ли переменные установлены с помощью exist('opt', 'var')
.
Пример:
function [a] = train(x, y, opt)
if (~exist('opt', 'var'))
opt = true;
end
end
См. этот ответ для профи для этого: Как проверить, включен ли аргумент в вызове функции?