使用varargin(...)时如何显示不同的功能用法?

时间:2012-02-23 12:07:55

标签: matlab

当您在命令窗口中键入Matlab函数名称并打开括号(例如sum()时,将打开一个工具提示,显示此函数的所有可能用法。

当我编写自己接受varargin的函数时,工具提示只显示一个选项,而不是varargin放置...(例如myfunc(x,...))。

如何向用户建议我的功能的更具体用法?

2 个答案:

答案 0 :(得分:1)

我可以在没有编辑语法的情况下将你带到那里'语法'虽然有点泥泞,但它适用于当前的版本。

以下函数为输入提供了一系列必需的,可选的和可选的名称 - 值对。我希望工具提示为用户提供所需和可选输入的信息。即使没有传递变量,varargin也总是存在,并且当传递varargin时,inputParser工作得很好。我将通过在函数调用上保留可选输入来利用这一点,但在我使用它们之前将它们堆叠到varagin中。

工具提示会显示myFun(frequency,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

答案 1 :(得分:0)

如果您知道变量输入的最大数量及其所有名称,那么一种方法就是执行以下操作:

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

执行此操作时,Matlab允许您使用0,1,2或3个参数调用my_func。但工具提示只有一个条目:

my_func(var1, var2, var3)

对我来说,至少看起来好于...。我不知道如何/它是否可以显示多个工具提示。

编辑:内置函数似乎在某处获得了某种额外的权限。例如,函数rank附带Matlab并显示两个工具提示。如果您edit rank,请将代码复制到新文件my_func.m中,并重命名函数my_func,它只会获得一个工具提示。所以它不仅仅是顶部注释行的一些特殊格式。