9

功能:

我的 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。

  • 根据 MA​​TLAB 的文档,上述函数调用应该可以工作:

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

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

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

非常感谢!

4

2 回答 2

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 请参阅此处的文档。

...以及varargin 此处的文档

于 2014-08-08T13:11:04.913 回答
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
于 2014-08-08T13:20:57.477 回答