72 votes

Arguments facultatifs dans les fonctions matlab

Comment puis-je déclarer la fonction dans Matlab avec les arguments optionnels?

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

57voto

Praetorian Points 47122

Il ya quelques options différentes sur la manière de procéder. Le plus fondamental est d'utiliser varargin, et ensuite utiliser nargin, size etc. pour déterminer si les arguments facultatifs ont été transmis à la fonction.

Un peu plus élégant à la recherche de solution est d'utiliser l' inputParser classe de définir tous les arguments attendus par votre fonction, à la fois obligatoires et facultatives. inputParser vous permet également d'effectuer une vérification de type à tous les arguments.

55voto

Morgan Points 6578

Un moyen 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 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
 

46voto

Evgeni Sergeev Points 1517

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 cette manière: Comment vérifier si un argument est fourni dans un appel de fonction?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X