【问题标题】:Checking how function has been called in MATLAB检查如何在 MATLAB 中调用函数
【发布时间】:2020-08-15 01:21:04
【问题描述】:

我的任务是编写一个具有可选输出参数的函数。

假设我有一个function y = fun(a,b)。据我了解,根据用户是否需要值y,它会计算y 或绘制一些图表。

所以我认为这意味着如果用户这样调用我的函数:z = fun(1,2),那么它会计算 y 并返回它,但如果他这样调用它:fun(3,4);,那么它不会返回任何东西而是画一个图表。

有什么方法可以检查我的函数是如何在其中被调用的?如果是,那么如何?

【问题讨论】:

  • 您可以使用varargout 来控制函数的输出数量,您可以在我对类似问题的回答中找到example of how to use it。当然你必须将参数传递给函数以用作标志来选择输出

标签: matlab arguments parameter-passing


【解决方案1】:

看看nargout,它大致转换为输出参数的数量(还有一个nargin 来检查输入参数的数量)。

但是,如果您只检查nargin,该函数无论如何都会返回返回值。您还需要使用varargout变量参数输出)使您的函数仅在将输出分配给某个外部变量时才返回一些内容。

所以你只需要写在你的函数中

function varargout = fun()

if nargout % implicit cast to a logical. It is equivalent to nargout > 0
    % return output
    varargout{1} = true; % note that this requires to wrap your output in a cell
else
    % do plotting
end

编辑: 甚至没有必要使用varargout。如果你不给返回变量赋值,它就不会出现。所以 MATLAB 可以管理一个未分配的返回变量(我很惊讶自己学会了这一点^^)。这甚至适用于多个输出!

【讨论】:

  • 您不需要varargout,您可以简单地不分配给输出变量,如另一个答案所示。否则,写得很好!
  • 哦,这是真的。这是从那时起还是一个新功能?我一直认为这是必要的
  • 这一直是这样,至少从我开始认真使用它的 MATLAB 5.3 (1999) 开始。
【解决方案2】:

您可以在这里使用nargout

function y = q61527462(a,b)
    if nargout > 0
        % Calculate y
        y = a + b;
    else
        % Plot
        plot(a,b)
    end
end

所以当你调用函数时:

>> y = q61527462(1,2)

你得到:

y =

     3

当你打电话时:

>> q61527462(1,2)

你懂的

【讨论】:

    猜你喜欢
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多