2012-02-23 11 views
5

Cuando escribe un nombre de función de Matlab y abre un paréntesis (por ejemplo, sum() en la ventana de comandos, se abre una información sobre herramientas que muestra todos los usos posibles de esta función.¿Cómo se muestran los diferentes usos de funciones cuando se usa varargin (...)?

Cuando escribo mi propia función que acepta varargin, la información sobre herramientas muestra sólo una opción, que en lugar de varargin pone ... (por ejemplo myfunc(x,...)).

¿Cómo puedo sugerir usos más específicos de mi función al usuario?

+1

Estoy confundido por su pregunta. Ya está allí. Esto funciona para cualquier archivo m en su ruta de búsqueda. –

+0

Tiene toda la razón, edité la pregunta para mayor claridad. –

+3

Recientemente descubrí que la información sobre herramientas para una función se puede llamar mediante Ctrl + F1 en el editor MATLAB. ¡Guay! – yuk

Respuesta

0

Un método, si se conoce el número máximo de entradas variables y todos sus nombres, es hacer algo como:

function out = my_func(var1, var2, var3) 

    if nargin < 1 
     var1 = default_var1_value; 
    end 
    if nargin < 2 
     var2 = default_var2_value; 
    end 
    if nargin < 3 
     var3 = default_var3_value; 
    end 

end 

Al hacer esto, Matlab le permite llamar my_func con 0,1, 2 o 3 argumentos Sin embargo, la información sobre herramientas sólo tendrá una entrada:

my_func(var1, var2, var3) 

Esto, para mí, al menos, parece mejor que .... No tengo idea de cómo/si es posible hacer que muestre más de una información sobre herramientas.

Edit: Parece que las funciones integradas obtienen algún tipo de privilegio adicional en alguna parte. Por ejemplo, la función rank viene con Matlab y muestra dos información sobre herramientas. Si edit rank, copie el código en un nuevo archivo my_func.m y cambie el nombre de la función my_func, solo obtendrá una información sobre herramientas. Así que no es solo un formato especial de las líneas comentadas en la parte superior.

+0

El problema es que algunos vars pueden tener diferentes significados (como la mayoría de las funciones integradas de Matlab), y luego esto no funcionará. –

1

Puedo llegar hasta allí sin editar 'Sintaxis' que funciona en versiones actuales, aunque un poco embarradas.

La siguiente función toma un rango de pares de nombre-valor requeridos, opcionales y opcionales para las entradas. Deseo que la información sobre herramientas brinde información al usuario sobre las entradas requeridas y opcionales. varargin siempre existe incluso si no se le pasan variables, y inputParser funciona bastante bien cuando se entrega varargin. Voy a aprovechar esto dejando mis entradas opcionales en la llamada a la función, pero luego las apilaré en varagin antes de trabajar con ellas.

punta de la herramienta mostrará MYFUN (frecuencia, gain_optional, phase_optional, ...)

function myFun(frequency, gain_optional, phase_optional, varargin) 

%% Get mandatory and optional Inputs using inputParser 
p = inputParser; 

% mandatory inputs 
argName = 'frequency'; 
validation = @(x) validateattributes(x, {'numeric'}, {'2d','positive'}); 
p.addRequired(argName, validation); 


% optional inputs 

% start by packaging all optional inputs into varargin. The two optional 
% inputs were kept out of varargin so they will display in the tooltip 
if nargin > 2 
    varargin = [{phase_optional} , varargin]; 
end 
if nargin > 1 
    varargin = [{gain_optional} , varargin]; 
end 

% add optional inputs into inputParser 
argName = 'gainLinear'; 
default = []; 
validation = @(x) validateattributes(x, {'numeric'}, {'2d','positive'}); 
p.addOptional(argName, default, validation); 

argName = 'phaseDeg'; 
default = []; 
validation = @(x) validateattributes(x, {'numeric'}, {'2d','positive'}); 
p.addOptional(argName, default, validation); 

% name-value pairs 
argName = 'model'; 
default = []; 
validation = @(x) validateattributes(x, {'numeric'}, {'vector','positive'}); 
p.addParameter(argName, default, validation); 

argName = 'order'; 
default = []; 
validation = @(x) validateattributes(x, {'numeric'}, {'scalar','integer','>',0,'<',3}); 
p.addParameter(argName, default, validation); 

% pull out all passed data with the inputParser and stash into input struct 
p.parse(frequency, varargin{:}); 
input = p.Results 
Cuestiones relacionadas