2011-12-21 11 views
31

2つの引数を持つ関数dummyがあるとします。引数は、関数呼び出しで指定されていない場合は、デフォルト値を持つことができます。しかし、引数が提供されていないことを私はどのように知っていますか?関数呼び出しで引数が指定されているかどうかをチェックする方法は?

私は私が私が引数を引数名に基づいて供給されているかどうかを確認することができるかどうかを知りたいこの

function dummy(arg1, arg2) 
if nargin < 2 
    arg2 = 0; 
end 
if nargin < 1 
    arg1 = 0; 
end 
% function body 

のように、narginを使用することができます知っていますか? supplied(arg2) == falseのようなものです。

引数リストの先頭に新しい引数を追加したい場合があります(既定値がない可能性があるため)。if nargin ...をすべて変更する必要があります。名前で確認できる場合は、何も変更する必要はありません。

答えて

52

私はいつもそのように実行します。このソリューションでは、コードを変更せずに、関数の引数の数/順序を変更することができ、@Andreyで言ったように

if ~exist('arg1','var') 
    arg1=0; 
end 

。これは、narginソリューションでは該当しません。

if ~exist('arg1','var') || isempty(arg1) 
    arg1=arg1DefaultValue; 
end 
+1

あなたは今までに変更の場合には、コードを変更する必要はありませんので、これは、関数narginよりもはるかに優れています:あなたはあなたが行うことができ、引数をスキップできるようにしたいかのように、@yukで言っ

関数内のパラメータの順序 –

+1

私は通常、 '... | isempty(arg1) 'なので、ユーザは' arg1'をスキップすることができますが、 'arg2'を供給することができます。もちろん、 'arg1'を空にすることはできません。 – yuk

+2

私はそれが本当に質問に答えていないと思いました。とにかく、私は答えを編集しました。また、 '||'(短絡演算子)を使って 'arg1'が存在しない場合にエラーがないことを確認しなければならないと思います。 – Oli