是否可以检测Matlab函数的忽略输出?

是否可以检测Matlab函数的忽略输出?,matlab,Matlab,假设我有一个功能强大的工作人员: [a b c d] = lotsOfComputation(); 在某些用例中,我可能只需要它的一个或两个输出。在这些情况下,我用~忽略输出。是否可以从lostOfComputement功能中检测到这一点 (是的,我知道更优雅的解决方案是将函数重构为单独的函数。我已经为即时用例做了这项工作,但问题仍在我的脑海中。)当然,试试看,它会返回输出参数的数量。好吧,事实上,当忽略参数时,这会起作用,但它会算作一个参数。下面是一个例子: function [a b c]

假设我有一个功能强大的工作人员:

[a b c d] = lotsOfComputation();
在某些用例中,我可能只需要它的一个或两个输出。在这些情况下,我用
~
忽略输出。是否可以从
lostOfComputement
功能中检测到这一点

(是的,我知道更优雅的解决方案是将函数重构为单独的函数。我已经为即时用例做了这项工作,但问题仍在我的脑海中。)

当然,试试看,它会返回输出参数的数量。好吧,事实上,当忽略参数时,这会起作用,但它会算作一个参数。下面是一个例子:

function [a b c] = test()
  a=0;b=0;c=0;
  disp(nargout);
end

>> [a, b] = test();
   2
>> [~, b] = test();
   2
>> [~, ~, ~] = test();
   3

因此,也许你的确切问题的答案是否定的,至少不是用
nargout

直接回答你的问题,我不知道

但是,如果您要求这样做是为了节省可能浪费的计算,您可以将函数拆分为子函数,但使用
deal
保留原始帖子中的一般语法

例如,如果您总是希望从
lotsofcompulation
中获得
a
b
,则可以将函数重新制作为

[a b] = lotsOfComputation();
然后可以对
c
d
进行两次单独的计算

[c] = cComp();
[d] = dComp();
然后,您可以将原始函数编写为

[a b c d] = deal(lotsOfComputation(), cComp(), dComp());
如果要忽略
c
d
的输出,可以在deal函数中用空值替换函数调用,即

[a b ~ d] = deal(lotsOfComputation(), 0, dComp());

我知道这并不能直接回答这个问题,但它可能在理论上很有趣:)

MATLAB确实有一种方法可以检测是否指定了输出。
hist
函数就是一个例子。如果没有输出,它将绘制直方图。通过输出,它返回每个存储箱的计数和存储箱间距。您可以尝试查看它的文档,看看是否有方法检测省略的输出变量。(我会这么做,但我的机器现在被一个小时的计算所占用。)正如你自己所注意到的,它对省略的输出变量不起作用,这就是OP所问的。