正确使用tilde运算符作为输入参数

时间:2014-08-08 12:57:05

标签: matlab function tilde

功能:

我的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 2013b,它支持代字号运算符。
  • 根据MATLAB的文档,上述函数调用应该有效:

      

    您可以在参数列表中的任何位置忽略任意数量的函数输入。用逗号分隔连续的波浪...

  • 我想有一些解决方法,例如使用''或[]作为输入,但我真的很想了解如何正确使用'〜'因为实际上保留输入允许我在检查函数的输入参数时使用exist()。

如果您需要我的任何进一步信息,请告诉我。

非常感谢!

2 个答案:

答案 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