2011-12-21 8 views
31

Supongamos que tengo una función, dummy, con 2 argumentos. Los argumentos pueden tener valores predeterminados cuando no se proporcionan en la llamada a la función. ¿Pero cómo sé que no se proporcionan argumentos?¿Cómo comprobar si se proporciona un argumento en la llamada a la función?

Sé que puedo utilizar nargin, como este

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

Quiero saber si puedo comprobar si un argumento es suministrado basado en el nombre del argumento? Algo así como supplied(arg2) == false.

Lo pregunto porque, a veces quiero agregar nuevos argumentos en la parte delantera de la lista de argumentos (ya que puede no tener un valor predeterminado), y luego tengo que cambiar todos los if nargin .... Si puedo verificar por nombre, no tiene que cambiar nada.

Respuesta

52

siempre me gusta que:

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

Como dijo por @Andrey, con esta solución se puede cambiar el número/orden de los argumentos de la función, sin cambiar el código. Este no es el caso con la solución nargin.

Según lo dicho por @yuk, si desea permitir saltarse los argumentos que puede hacer:

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

Esto es mucho mejor que nargin, porque usted no tiene que cambiar el código en caso de que el cambio el orden de los parámetros en la función. –

+1

Por lo general, también agrego '... | isempty (arg1) ', por lo que el usuario puede omitir' arg1', pero suministrar 'arg2'. Por supuesto, si 'arg1' no puede estar vacío. – yuk

+2

Abosultely, pero pensé que realmente no respondía la pregunta. De todos modos, edité la respuesta. También creo que tienes que usar '||' (Operador de cortocircuito) para asegurarte de que no haya ningún error si 'arg1' no existe. – Oli

Cuestiones relacionadas