2012-02-23 42 views
5

當您輸入Matlab函數名稱並在命令窗口中打開大括號(例如sum()時,會打開一個工具提示,其中顯示該函數的所有可用用法。如何在使用varargin(...)時顯示不同的功能用法?

當我寫我自己的函數接受varargin,工具提示僅顯示一個選項,而不是varargin這使...(例如myfunc(x,...))。

我該如何向用戶建議我的功能的更具體的用法?

+1

我對你的問題感到困惑。它已經在那裏。這適用於搜索路徑上的任何m文件。 – 2012-02-23 12:35:47

+0

你是對的,我爲了清晰起見編輯了這個問題。 – 2012-02-23 12:56:45

+3

我最近發現一個函數的工具提示可以在MATLAB編輯器中用Ctrl + F1調用。涼! – yuk 2012-02-23 15:10:23

回答

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,您可以撥打my_func與0,1, 2或3個參數。但提示只會有一個條目:

my_func(var1, var2, var3) 

這對我來說,至少似乎比...更好。我不知道如何/如果可以使其顯示多個工具提示。

編輯:似乎內置函數在某處獲得某種額外的特權。例如,函數rank附帶Matlab並顯示兩個工具提示。如果你edit rank,將代碼複製到一個新文件my_func.m,並重命名功能my_func,它只獲得一個工具提示。所以這不僅僅是頂部註釋行的特殊格式。

+0

問題是,一些變量可以有不同的含義(像大多數建立在函數中的Matlab),然後這將不起作用。 – 2012-02-23 13:29:36

1

我可以在沒有編輯'Syntax'的情況下讓你在那裏工作在當前版本上,雖然有點渾濁。

下面的函數爲輸入提供了一系列必需的,可選的和可選的名稱 - 值對。我希望工具提示可以向用戶提供有關所需和可選輸入的信息。即使沒有變量傳入它,varargin也會一直存在,並且在遞交varargin時inputParser工作得很好。我將通過在函數調用中留下可選的輸入來利用這一點,但在我使用它們之前將它們疊放到varagin中。

工具提示會顯示myFun(頻率,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 
相關問題