2011-08-27 3 views
7

Je suis en train de tracer des séquences, j'ai écrit une fonctionComment surcharger les fonctions définies par l'utilisateur dans Matlab?

function show_seq(seq) 
plot (seq) 
end 

Je veux maintenant surcharger ce show_seq pour montrer 2 séquences quelque chose comme

function show_seq(seq1, seq2) 
    plot(seq1,'color','r'); 
    plot(seq2, 'color', 'b'); 
end 

mais cela ne fonctionne pas, quelqu'un at-il idée sur la façon de surcharger les fonctions dans MATLAB?

+0

connexes: http://stackoverflow.com/questions/8630889/overloading-functions/8631335 # 8631335 –

Répondre

10

Vous pouvez surcharger l'une de vos propres fonctions si vous placez la fonction de surcharge dans un chemin de priorité supérieure. Pour plus de détails sur la priorité du chemin, voir this question.

Cependant, dans votre cas, le plus simple serait de modifier show_seq pour qu'il accepte plusieurs entrées en option:

function show_seq(varargin) 
    hold on %# make sure subsequent plots don't overwrite the figure 
    colors = 'rb'; %# define more colors here, 
       %# or use distingushable_colors from the 
       %# file exchange, if you want to plot more than two 

    %# loop through the inputs and plot 
    for iArg = 1:nargin 
     plot(varargin{iArg},'color',colors(iArg)); 
    end 
end 
+21

Jésus, donc vous ne pouvez pas mettre ces deux surcharges dans un fichier comme vous le feriez dans toutes les autres langues que j'ai rencontrées jusqu'à présent? – Grzenio

+2

@Grzenio: Sans astuces, vous ne pouvez en effet mettre plusieurs fonctions indépendantes dans un seul fichier. Cependant, pensez-vous vraiment qu'il est plus facile et plus efficace de copier-coller la plupart de la fonction plusieurs fois pour des signatures différentes, plutôt que d'écrire une fonction qui peut gérer plusieurs signatures? – Jonas

+15

Dans les langages de programmation normaux, vous créez généralement une fonction avec tous les paramètres possibles avec l'implémentation réelle, et quelques fonctions avec un ensemble de paramètres plus spécialisés, qui adaptent simplement les paramètres, fournissent des valeurs par défaut, etc. . La principale chose que vous copiez-collez est, bien, le nom de la fonction ... – Grzenio

Questions connexes