我最近遇到了一个问题,那就是我应该定义一个输入数量不确定的函数,也就是说,根据实际情况,输入数量可能会有所不同。我应该使用二维数组还是其他?我不知道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