如何在没有'输出参数'的情况下终止函数varargout“not assigned”错误?

时间:2014-06-03 20:00:33

标签: matlab return

我有一个带有可变数量的参数和输出的函数,如果有一个额外的参数,我希望它在某一点退出:

function [out, varargout] = myfunction(a,varargin)

    % do stuff
    out = 1;

    if nargin > 1
       return
    end

    % do extra stuff if there is no additional argument
    varargout{1} = 'optional output';

end

我收到错误

Output argument "varargout" not assigned during call to "C:\...\myfunction"

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

这样的事情怎么样?

function varargout = my_function(a,varargin)

    % do stuff
    varargout{1} = 1;

    if nargin > 1
        if nargout > 1
            varargout(2:nargout) = {[]};
        end
       return
    end

    % do extra stuff if there is no additional argument
    varargout{2} = 'optional output';

end

测试:

[a b] = my_function(2)
a =
     1
b =
optional output

[a b] = my_function(2,3)
a =
     1
b =
     []

问题是,您无法调用具有比其创建的输出更多的函数。因此,调用原始函数a = my_function(2,3)可以正常工作,而[a b] = my_function(2,3)会导致错误。

因此,您(至少)有两种选择:

  1. 确保每次执行该函数时输出和输入变量的数量都匹配。

  2. 按照我上面的方法行事。