功能:
我的MATLAB函数有一个输出和几个输入参数,其中大多数是可选的,即:
output=MyFunction(arg1,arg2,opt1,opt2,...,optN)
我想做什么:
我想只将arg1,arg2和最后一个可选输入参数optN给予该函数。我使用了波浪符运算符,如下所示:
output=MyFunction(str1,str2,~,~,...,true)
不受欢迎的结果:
这会出现以下错误消息:
Error: Expression or statement is incorrect--possibly unbalanced (, {, or [.
错误指向第一个代字号后面的逗号,但我不知道该怎么做才是诚实的。
问题识别:
根据MATLAB的文档,上述函数调用应该有效:
您可以在参数列表中的任何位置忽略任意数量的函数输入。用逗号分隔连续的波浪...
我想有一些解决方法,例如使用''或[]作为输入,但我真的很想了解如何正确使用'〜'因为实际上保留输入允许我在检查函数的输入参数时使用exist()。
如果您需要我的任何进一步信息,请告诉我。
非常感谢!
答案 0 :(得分:9)
代字号仅用于功能声明。 Matlab的mlint建议用~
替换未使用的参数。结果是一个声明为function output = MyFunction(a, b, ~, c)
的函数。这是一种非常糟糕的做法。
由于您的参数是可选的函数,因此必须使用空参数output=MyFunction(str1,str2,[],[],...,true)
调用该函数。
更好的方法是使用varargin
参数声明函数,并为不同的输入准备函数:
function output = MyFunction(varargin)
if nargin == 1
% Do something for 1 input
elseif nargin == 2
% Do something for 3 inputs
elseif nargin == 3
% Do something for 3 inputs
else
error('incorrect number of input arguments')
end
甚至可以按如下方式声明您的功能:
function output = MyFunction(arg1, arg2, varargin)
上面的声明将告诉Matlab你期望至少有两个参数。
请参阅nargin
here的文档。
...以及varargin
here
答案 1 :(得分:4)
要拥有可变数量的输入,请使用varargin。与nargin一起使用。
示例:
function varlist2(X,Y,varargin)
fprintf('Total number of inputs = %d\n',nargin);
nVarargs = length(varargin);
fprintf('Inputs in varargin(%d):\n',nVarargs)
for k = 1:nVarargs
fprintf(' %d\n', varargin{k})
end