假设我有一个函数给出未知数量的输出参数(它取决于输入,因此通过循环改变)。如何获得所有这些?
nargout
无效,因为函数使用varargout
(结果为-1)
当然我不能重写这个功能,否则问题不会出现: - )
答案 0 :(得分:6)
好吧,感谢所有参与讨论的人。总而言之,似乎问题没有通用的解决方案,因为MatLab本身在函数调用之前估计了所需输出的数量。但可以指出三种情况:
1)funcrion在定义中没有varargout
,因此nOut=nargout(@fcn)
返回正数。
然后nOut
是实际的输出数量,我们可以使用单元格数组和列列表技巧。
X=cell(1,nOut);
[X{:}]=fcn(inputs);
2)funcrion在定义中有varargout
,因此nOut=nargout(@fcn)
返回负数。但是,可以找到与输入的某些相关性(如length(varargin)=length(varargout)
)。
然后我们可以从nOut
计算得到的inputs
并执行上面的列列表技巧。
3)你知道fcn
开发者。
向他求助。例如,将函数的输出作为单元格数组。
答案 1 :(得分:2)
在这种情况下我通常使用的一种方法是将所有输出存储在函数内的单元格数组中。将单元格数组放在函数体外,可以研究它的长度和其他属性。
答案 2 :(得分:0)
以下是您如何处理问题的一般方法。我之前没有提到这个解决方案,因为......这太可怕了。
假设一个函数可以有1或2个输出参数:
try
[a, b] = f(x)
catch
a = f(x)
end
当然可以为任意数量的输出参数执行此操作,但您真的不想这样做。