是否有可能检测到Matlab函数的忽略输出?

时间:2012-09-13 22:00:47

标签: matlab

假设我有一个功能强大的主力:

[a b c d] = lotsOfComputation();

在某些用例中,我可能只需要其中一个或两个输出。在这些情况下,我忽略了~的输出。是否可以在lostOfComputation函数中检测到这一点?

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

2 个答案:

答案 0 :(得分:3)

当然,试试nargout,它会返回输出参数的数量。好吧,实际上当省略参数时它会起作用,但它会将〜作为一个参数。这是一个例子:

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

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

所以也许你的确切问题的答案是否定的,至少不是nargout

答案 1 :(得分:1)

直接回答你的问题,而不是我所知道的。

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

例如,如果您始终希望来自a的{​​{1}}和b,则可以将您的功能重新设为

lotsOfComputation

然后,您可以对[a b] = lotsOfComputation(); c

进行两次单独的计算
d

然后您可以将原始函数编写为

[c] = cComp();
[d] = dComp();

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

d

我知道这并没有直接回答这个问题,但它可能具有理论上的兴趣:)