2011-08-27 3 views
7

私はシーケンスをプロットしようとしていますが、私は機能私は今Matlabでユーザ定義関数をオーバーロードする方法は?誰もが持っていない、

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

のような2つの系列の何かを表示するには、このshow_seqをオーバーロードしたい

function show_seq(seq) 
plot (seq) 
end 

に書かれているが、これは動作しません。 MATLABの関数をオーバーロードする方法についてのアイデア?

+0

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

答えて

10

優先度の高いパスにオーバーロード機能を追加すると、独自の関数をオーバーロードできます。パスの優先順位の詳細については、this questionを参照してください。

しかし、あなたのケースでは、最も簡単には、複数のオプションの入力を受け付けるようにshow_seqを修正するために、次のようになります。

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

イエス様、私はこれまでに遭遇した言語のすべての場合と同じように、これら2つの過負荷を1つのファイルに入れることはできません。 – Grzenio

+2

@Grzenio:トリックがなければ、実際には複数の独立した関数を1つのファイルに入れることはできません。しかし、複数の署名を扱うことのできる関数を書くのではなく、関数のほとんどを複数の異なる署名にコピーして貼り付ける方が簡単で効率的だと思いますか? – Jonas

+15

通常のプログラミング言語では、実際の実装で可能なすべてのパラメータを持つ関数を1つ作成し、より特殊なパラメータセットを持つ関数をいくつか作成します。パラメータの適合、デフォルト値の提供などです。 。あなたがコピー貼り付けの主なものは、まあ、関数名です... – Grzenio

関連する問題