Comment déclarer une fonction dans MATLAB avec des arguments facultatifs?
Par exemple: function [a] = train(x, y, opt)
, où opt doit être un argument facultatif.
Il y a quelques options différentes sur la façon de faire cela. Le plus fondamental consiste à utiliser varargin
, puis à utiliser nargin
, size
, etc., afin de déterminer si les arguments facultatifs ont été transmis à la fonction. .
% 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
Une solution un peu plus élégante consiste à utiliser la classe inputParser
pour définir tous les arguments attendus par votre fonction, qu'ils soient obligatoires ou facultatifs. inputParser
vous permet également de vérifier le type de tous les arguments.
Un moyen simple de le faire est via nargin (N arguments dans). L'inconvénient est que vous devez vous assurer que votre liste d'arguments et les contrôles nargin correspondent.
Il convient de rappeler que toutes les entrées sont facultatives, mais les fonctions se fermeront avec une erreur si elles appellent une variable non définie. L'exemple suivant définit les valeurs par défaut pour b et c. Sortira si un n'est pas présent.
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
Une bonne façon de procéder consiste à ne pas utiliser nargin
, mais à vérifier si les variables ont été définies à l'aide de exist('opt', 'var')
.
Exemple:
function [a] = train(x, y, opt)
if (~exist('opt', 'var'))
opt = true;
end
end
Voir cette réponse pour les pros de le faire de cette façon: Comment vérifier si un argument est fourni dans un appel de fonction?