2013-09-27 56 views
2
function y = myFunc(tR,mode) 

if ~isfield(tR, 'isAvailable') 
    tR.isAvailable= false; 
end 

if tR.isAvailable 
y = fullfile(workingFolder,'file.txt'); 
else 
y = ''; 

switch(mode) 
case '1' 
.....  
case '2' 
..... 
end 
end 

當我打電話myFunc的(TR,「1」)it'es OK ,但我也能夠有時稱之爲myFunc的,而不只是模式myFunc的(TR)調用Matlab的功能

在函數內的某些情況下,我怎麼能說myFunc不在參數中提供模式變量時不執行開關情況?

回答

1
  1. 使用的exist可能是最巧妙的,如果你想「末」排除元素要做到這一點,雖然nargin也可以做的伎倆最簡單的方法。一般來說,如果變量具有意義完整的名稱或沒有有意義的名稱,我會使用nargin,並且僅當它們具有有意義的名稱時才使用narginSee this question for more about this choice.

  2. 如果你想排除一般元素,使用varargin可能是最好的方法。

  3. 但是,如果你只是想排除中間1元,一個簡單的替代方法是:

如果你不想使用mode,把它作爲[],那麼你把你的switch語句是:

if ~isempty(mode) 
    % Your switch statement here 
end 

當然的風險在於,如果你忘記了在同一個函數後使用if聲明奇怪的事情會發生。

+0

'nargin'與你的'NaN'理念一樣簡單,但更加合理,並允許你用一個參數來調用函數。我建議反對'NaN'黑客。 – Dan

+0

是的,但當我調用函數myFunc(tR)時,我得到錯誤,如果模式是南? – lola

+0

@lola'NaN'解決方法不是使用1個元素調用函數的解決方案,它只是允許您將其稱爲:'myFunc(tR,NaN)'並​​避免使用switch語句。如果模式是你最後一次輸入的參數,這將不會獲得太多的收益,但是如果你的函數是這樣的:'muFun(a,mode,b,c,d,e,f,g,h)'這會爲你節省工作處理'mode'和所有尾隨輸入參數。 –

2

使用nargin在你的函數提供一些默認輸入時是由用戶提供的不夠投入。

+0

'nargin'是去這裏的路。如果你只有一個可選的參數,'varargin'建議是矯枉過正的。這將是最乾淨和最簡單的方法。 – Dan

2

answer by Dennis Jaheruddin給人的可能性良好的名單,但我也發現使用exist一個有用的方法:

if exist('mode', 'var') 
    % Your switch statement here 
end 
+1

正如你已經將我的答案描述爲一個列表,我已經很自由地將這個列表包含在列表中了! –

+0

@ DennisJaheruddin不客氣 –