2011-12-21 138 views
31

假設我有一個函數dummy,帶有2個參數。參數在函數調用中沒有提供時可以有默認值。但我怎麼知道是不是提供了一個參數?如何檢查函數調用中是否提供了參數?

我知道我可以使用nargin,這樣

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

我想知道我是否可以檢查是否論據是基於參數名供應嗎?像supplied(arg2) == false

我問這是因爲,有時我想在參數列表的前面添加新的參數(因爲它可能沒有默認值),然後我必須更改所有的if nargin ...。如果我可以通過名字檢查,則不需要改變。

回答

52

我總是做這樣的:

if ~exist('arg1','var') 
    arg1=0; 
end 

至於說通過@Andrey,這種解決方案可以改變的函數的參數個數/訂單,而無需修改代碼。 nargin解決方案並非如此。

至於說通過@yuk,如果你想允許跳過參數,你可以這樣做:

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

這比nargin好得多,因爲你沒有改變的情況下,你的代碼改變過函數中參數的順序。 – 2011-12-21 15:16:10

+1

我通常也加上'... | isempty(arg1)',所以用戶可以跳過'arg1',但是提供'arg2'。當然如果'arg1'不能爲空。 – yuk 2011-12-21 16:56:52

+2

Abosultely,但我認爲這不是真的回答這個問題。無論如何,我編輯了答案,並且我認爲如果'arg1'不存在,你必須使用'||'(Short-Circuit Operator)來確保沒有錯誤。 – Oli 2011-12-21 19:53:25

相關問題