2012-02-23 16 views
5

Bir Matlab işlev adı yazdığınızda ve komut penceresinde bir ayraç (ör. sum() açtığınızda, bu işlevin tüm olası kullanımlarını gösteren bir araç ipucu açılır. Varargin (...) kullanırken farklı işlev kullanımı nasıl gösterilir?

Ben varargin kabul kendi işlevi yazma

, araç ipucu yerine varargin ait ... koyar sadece bir seçenek, (örn myfunc(x,...)) gösterir.

Kullanıcıya işlevin daha özel kullanımlarını nasıl öneriyorum? Maksimum değişken girdilerin sayısını ve adlarını bildiği takdirde

+1

ben sorunuzun tarafından karıştı gösterecektir. Onun zaten var. Bu, arama yolunuzdaki herhangi bir m-dosyası için çalışır. –

+0

Kesinlikle haklısınız, sorumluluğu açıklığa kavuşturdum. –

+3

Son zamanlarda MATLAB editöründe bir fonksiyon için araç ipucunun Ctrl + F1 tarafından çağrılabileceğini keşfettim. Güzel! – yuk

cevap

0

bir yöntem, böyle bir şey yapmaktır: Bunu yaptığınızda, Matlab sağlar

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 

Eğer 0,1 ile my_func çağrı 2 veya 3 argüman.

my_func(var1, var2, var3) 

Bu, bana göre en az ... daha iyi görünüyor: Ama ipucu yalnızca tek bir girişi olur. Birden fazla araç ipucunu nasıl görüntüleyebildiğimi/nasıl yapabileceğini hiç bilmiyorum.

Düzenleme: Yerleşik işlevlerin bir yere fazladan ayrıcalık kazandırdığı anlaşılıyor. Örneğin, rank işlevi Matlab ile birlikte gelir ve iki araç ipucu görüntüler. edit rank, kodu my_func.m yeni bir dosyaya kopyalayın ve my_func işlevini yeniden adlandırın, yalnızca bir araç ipucu alır. Yani, üstte yorumlanan satırların sadece özel bir biçimlendirmesi değil.

+0

Sorun, bazı varsların farklı anlamlara sahip olabileceğidir (çoğu Matlab fonksiyonlarda olduğu gibi) ve bu işe yaramaz. –

1

Mevcut sürümlerde çalışan 'Syntax'ı düzenlemeden, biraz çamurlu olsa da sizi orada bulabilirim.

Aşağıdaki işlev, girişler için gerekli, isteğe bağlı ve isteğe bağlı ad-değer çiftlerini içerir. Gerekli ve isteğe bağlı girişler hakkında kullanıcı bilgilerini vermek için araç ipucu istiyorum. Varargin, hiçbir değişkene aktarılmamış olsa bile her zaman vardır ve inputParser, varargin teslim edildiğinde oldukça iyi çalışır. Bu özellikten, isteğe bağlı girdilerimi işlev çağrısında bırakarak, ancak onlarla birlikte çalışmaya başlamadan önce bunları varagin içine yığmaktan yararlanacağım.

araç ipucu myFun (frekans, 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 
İlgili konular