2011-12-21 8 views
31

Powiedz, że mam funkcję, dummy, z 2 argumentami. Argumenty mogą mieć wartości domyślne, jeśli nie są podane w wywołaniu funkcji. Ale skąd mam wiedzieć, czy argumenty nie są dostarczane?Jak sprawdzić, czy argument jest podany w wywołaniu funkcji?

wiem, że mogę używać nargin, jak to

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

Chcę wiedzieć, czy mogę sprawdzić, czy an argumenty dostarczany jest na podstawie nazwy argumentów? Coś takiego jak supplied(arg2) == false.

Pytam o to, ponieważ czasami chcę dodać nowe argumenty z przodu listy argumentów (ponieważ może nie mieć wartości domyślnej), a następnie muszę zmienić wszystkie if nargin .... Jeśli mogę sprawdzić po nazwie, nic nie musi zostać zmienione.

Odpowiedz

52

zawsze robię tak:

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

Jak powiedział przez @Andrey, z tego rozwiązania można zmienić numer/kolejność argumentów funkcji, bez zmiany kodu. Nie dotyczy to rozwiązania nargin.

Jak powiedział przez @yuk, jeśli chcesz, aby pominąć argumenty można zrobić:

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

Jest to o wiele lepiej niż nargin, ponieważ nie trzeba zmienić kod w przypadku kiedykolwiek zmiana kolejność parametrów w funkcji. –

+1

Zwykle dodajemy również "... | isempty (arg1) ', więc użytkownik może pominąć' arg1', ale podać 'arg2'. Oczywiście, jeśli "arg1" nie może być puste. – yuk

+2

Abosultely, ale myślałem, że to nie jest tak naprawdę odpowiedź na pytanie. W każdym razie, zredagowałem odpowiedź, także myślę, że musisz użyć '||' (Short Circuit Operator), aby upewnić się, że nie ma błędu, jeśli 'arg1' nie istnieje. – Oli

Powiązane problemy