2011-08-27 12 views
7

Próbuję działki sekwencje, napisałem funkcjęJak przeciążyć funkcje zdefiniowane przez użytkownika w Matlab?

function show_seq(seq) 
plot (seq) 
end 

teraz chcę przeciążać to show_seq pokazać 2 sekwencje coś podobnego

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

ale to nie działa, czy ktoś ma pomysł na temat przeciążania funkcji w MATLAB?

+0

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

Odpowiedz

10

Możesz przeciążyć jedną z własnych funkcji, jeśli przełączysz funkcję przeciążania na ścieżkę o wyższym priorytecie. Aby uzyskać więcej informacji na temat priorytetu ścieżki, zobacz this question.

Jednak w przypadku, najłatwiej byłoby zmodyfikować show_seq więc, że akceptuje wiele opcjonalnych wejść:

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

Jezu, więc nie możesz po prostu umieścić tych dwóch przeciążeń w jednym pliku, tak jak zrobiłbyś to w każdym innym języku, z jakim się zetknąłem? – Grzenio

+2

@Grzenio: Bez sztuczek, nie można umieścić wielu niezależnych funkcji w jednym pliku. Czy jednak uważasz, że łatwiej i bardziej wydajnie jest kopiować i wklejać większość funkcji wiele razy dla różnych sygnatur, zamiast pisać jedną funkcję, która może obsługiwać wiele sygnatur? – Jonas

+15

W normalnych językach programowania zwykle tworzy się jedną funkcję z wszystkimi możliwymi parametrami wraz z aktualną implementacją, oraz kilka funkcji z bardziej wyspecjalizowanym zestawem parametrów, które po prostu dostosowują parametry, dostarczają pewnych wartości domyślnych itd. I wywołują funkcję z implementacją . Najważniejszą rzeczą, którą kopiujesz i wklejasz, jest nazwa funkcji ... – Grzenio

Powiązane problemy