10

I am trying to plot sequences, I have written a function

function show_seq(seq)
 plot (seq)
end

I now want to overload this show_seq to show 2 sequences something like

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

but this does not work, does anyone have idea about how to overload functions in MATLAB?

Stewie Griffin
  • 14,889
  • 11
  • 39
  • 70
user425194
  • 503
  • 2
  • 5
  • 8

1 Answers1

11

You can overload one of your own functions if you put the overloading function in a path that with higher precedence. For more details on path precedence, see this question.

However, in your case, the easiest would be to modify show_seq so that it accepts multiple optional inputs:

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
Community
  • 1
  • 1
Jonas
  • 74,690
  • 10
  • 137
  • 177
  • 21
    Jesus, so you can't just put these two overloads in one file as you would do in every other language I came across so far? – Grzenio Mar 23 '12 at 11:12
  • 2
    @Grzenio: Without tricks, you indeed cannot put multiple independent functions in one file. However, do you really think it is easier and more efficient to copy-paste most of the function multiple times for different signatures, rather than writing one function that can handle multiple signatures? – Jonas Mar 24 '12 at 13:00
  • 16
    In normal programming languages you would usually create one function with all the possible parameters with the actual implementation, and a few functions with more specialized set of parameters, which just adapt the parameters, provide some default values etc. and call the function with implementation. The main thing you copy-paste is, well, the function name... – Grzenio Mar 24 '12 at 19:48