2011-12-21 15 views
31

2 argümanlı bir fonksiyona sahip olduğumu söyle, dummy. Argümanlar, işlev çağrısında verilmediğinde varsayılan değerlere sahip olabilir. Ama nasıl bir argüman verilmediğini biliyorum?Bir argümanın işlev çağrısında sağlanıp sağlanmadığı nasıl kontrol edilir?

Ben Ben bir argüman argüman adına göre verilir olmadığını kontrol edip edemeyeceğini bilmek istiyorum bu

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

gibi nargin kullanabilirsiniz biliyor musunuz? supplied(arg2) == false gibi bir şey.

Bunu soruyorum çünkü bazen argüman listesinin önüne yeni argümanlar eklemek istiyorum (varsayılan değere sahip olmayabilir) ve sonra tüm if nargin ...'u değiştirmem gerekiyor. Eğer isimle kontrol edebilirsem, hiçbir şeyin değiştirilmesi gerekmiyor.

cevap

52

Hep böyle yapın:

@Andrey tarafından söylediği gibi
if ~exist('arg1','var') 
    arg1=0; 
end 

, fonksiyonun argüman sayısı/sırasını değiştirebilirsiniz Bu çözüm ile, kodu değiştirmeden. Bu, nargin çözümünde geçerli değildir.

Eğer yapabileceğiniz argümanlar atlamak izin vermek istiyorsanız, @yuk tarafından söylediği gibi

: Eğer yok çünkü durumunda kodunu değiştirmek için,

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

Bu Belgeselde, Nargin daha iyidir Hiç değişiklik Fonksiyondaki parametrelerin sırası. –

+1

Genellikle ben de ekliyorum ... | isempty (arg1) ', böylece kullanıcı arg1'i atlayabilir, ancak arg2' yi tedarik edebilir. Elbette 'arg1' boş olamaz. – yuk

+2

Abosultely, ama soruyu gerçekten cevaplamadığını düşündüm. Her neyse, cevabı düzenledim, Ayrıca '' '(Kısa Devre Operatörü)' 'arg1''s varsa, hata olmadığından emin olmak için kullanmak zorunda olduğunu düşünüyorum. – Oli

İlgili konular