【问题标题】:Pass empty function handle as argument MATLAB传递空函数句柄作为参数 MATLAB
【发布时间】:2017-03-04 22:59:32
【问题描述】:

我有一个这样的代码:

bla = {[], @fftshift, @ifftshift};

for aa=1:numel(bla)

for bb=1:numel(bla)

   for cc=1:numel(bla)

      for dd=1:numel(bla)

          [~, ~, ~] = somefunction(bla{aa}, bla{bb}, bla{cc}, bla{dd});
      end

   end

end

end

somefunction 我有

Y = func1(fft(func2(blablabla)));

其中 func1 和 func2 被 bla{aa} 和 bla{bb} 替换。

如果我运行这段代码,我会得到一个错误

Subscript indices must either be real positive integers or logicals.

我如何告诉 Matlab 我不想将任何函数作为参数传递,例如对于第一次迭代,我会有

(fft((blablabla)))

编辑

我已经尝试过编写一个“空”函数并将其句柄作为参数传递

function donothing()
end

bla = {@donothing, @fftshift, @ifftshift};

简单地说

bla = {[], @fftshift, @ifftshift};

bla = {'', @fftshift, @ifftshift};

但在所有情况下我都得到了Subscript indices must either be real positive integers or logicals.Too many input arguments.

【问题讨论】:

  • 将句柄传递给标识函数而不是空数组:h = @(x) x
  • 不,这行不通。我得到Too many input arguments.
  • 啊哈,所以您需要一个具有多个输入和输出的函数。如果您有特定数量的参数,您可以使用h = @(x1, x2, x3) deal(x1, x2, x3),例如 3 个参数。
  • 原来you can use varargin in anonymous functions也是如此,所以你会这样做h = @(varargin) deal(varargin)
  • 函数function varargout = doNothing(varargin) 和内容varargout = varargin; 是否有效?

标签: matlab


【解决方案1】:

根据 hbaderts 的评论,答案是

function varargout = doNothing(varargin)
    varargout = varargin;
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    相关资源
    最近更新 更多