Args optionnels dans les fonctions MATLAB

Comment puis-je déclarer une fonction dans MATLAB avec des arguments facultatifs?

Par exemple: function [a] = train(x, y, opt) , où opt doit être un argument optionnel.

Il existe différentes options sur la façon de procéder. Le plus simple est d’utiliser varargin , puis d’utiliser nargin , size etc. pour 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, à la fois obligatoires et facultatifs. inputParser vous permet également d’effectuer une vérification de type sur tous les arguments.

Une manière simple de le faire est via nargin (N arguments in). 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 que les fonctions se termineront par une erreur si elles appellent une variable non définie. L’exemple suivant définit les valeurs par défaut pour b et c. Va sortir 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 nargin consiste à ne pas utiliser nargin , mais à vérifier si les variables ont été définies en utilisant exist('opt', 'var') .

Exemple:

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

Voir cette réponse pour le faire de cette façon: Comment vérifier si un argument est fourni dans l’appel de fonction?