3

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

[a b c d] = lotsOfComputation();

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

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

4

2 回答 2

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

于 2012-09-13T22:16:52.923 回答
1

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

但是,如果您要求这样做以节省可能浪费的计算,您可以将您的函数拆分为子函数,但使用deal.

例如,如果您一直想要aand bfrom lotsOfComputation,您可以将您的函数重新制作为

[a b] = lotsOfComputation();

然后你可以有两个单独的计算cd

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

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

[a b c d] = deal(lotsOfComputation(), cComp(), dComp());

如果您想忽略cor的输出d,可以在 deal 函数中将函数调用替换为 null 值,即

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

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

于 2012-09-13T22:18:33.370 回答