我最近遇到了一個問題,那就是我應該定義一個輸入數量不確定的函數,也就是說,根據實際情況,輸入數量可能會有所不同。我應該使用二維數組還是其他?我不知道struct2cell是否有用,以及它是否真的有效。函數的輸入數量不確定
有沒有人有這樣做的最好方法的想法?
我可能不是很清楚,所以請讓我知道是否需要澄清任何事情。
感謝
我最近遇到了一個問題,那就是我應該定義一個輸入數量不確定的函數,也就是說,根據實際情況,輸入數量可能會有所不同。我應該使用二維數組還是其他?我不知道struct2cell是否有用,以及它是否真的有效。函數的輸入數量不確定
有沒有人有這樣做的最好方法的想法?
我可能不是很清楚,所以請讓我知道是否需要澄清任何事情。
感謝
有幾種方法去這個問題:
使用可選的輸入參數,如果給定參數的含義,無論背景相同,但如果在某些情況下,需要額外的投入。
function out = myFun(first,second,third,fourth)
%# first is always needed
if nargin < 1 || isempty(first)
error('need nonempty first input')
end
%# second is optional
if nargin < 2 || isempty(second)
second = defaultValueForSecondWhichCanBeEmpty;
end
%# etc
您可以將此函數調用爲out = myFun(1,[],2,3)
,即爲非必需的輸入傳遞一個空數組。
如果兩個輸入意味着該函數用於一種方式,和三個輸入意味着該功能以另一種方式使用(甚至投入意味着不同的事情),使用VARARGIN
function out = myFun(varargin)
%# if 2 inputs, it's scenario 1, with 3 it's scenario 2
switch nargin
case 2
firstParameter = varargin{1};
secondParameter = varargin{2};
scenario = 1;
case 3
firstParameter = varargin{1}; %# etc
otherwise
error('myFun is only defined for two or three inputs')
end
最後,您還可以將您的輸入作爲parameterName/parameterValue對傳遞。有關如何處理此類輸入的信息,請參閱this question。
您可以使用nargin
的參數驗證你的函數,所以如果你只需要一個做一些動作,或者如果TOU傳遞的參數做一些其他的動作。如:
function yours(arg1,arg2,arg3,arg4,arg5,...,argn)
if nargin < 5
arg5 = 'Init'
elseif (nargin > 1)
arg2 = 'Init'
arg3 = 'Init'
arg4 = 'Init'
arg5 = 'Init'
end
end
所以你可以控制你收到的參數數量。
感謝您的回答。但我不太明白,如何選擇argi的敘述。無論如何,我想我已經有了你的想法。謝謝。 – Tianhang 2011-03-08 07:13:36
謝謝喬納斯。你的想法可以完美地處理這個問題。但是,如果我們的報道大於10,那麼恐怕它將無法保持其效率。請讓我知道是否我錯了。再次,我真的很感謝你的幫助〜 – Tianhang 2011-03-08 01:37:18
@天行:你說的「效率」是什麼意思?無論如何,如果您可以爲輸入設置合理的默認值,那麼解決方案#3是最好的(例如,對於「plot」,您可以提供數十個附加輸入)。如果您不能輕鬆設置默認值(或從強制性輸入中估計它們),這意味着您必須始終輸入所有10個輸入,無論如何,您應該使用#1來減少所需的輸入量。 – Jonas 2011-03-08 02:12:14
好吧,我已經重新考慮了這一點,我認爲實際的背景可能不需要超過5個輸入,所以簡單檢查就可以完成。你是對的。謝謝你的幫助。 – Tianhang 2011-03-08 07:09:38