假设我有一个功能强大的主力:
[a b c d] = lotsOfComputation();
在某些用例中,我可能只需要它的一两个输出。在这些情况下,我会忽略带有~
. 是否可以从lostOfComputation
函数中检测到这一点?
(是的,我知道更优雅的解决方案是重构为单独的函数。我已经为直接用例做了这个,但问题仍然在我的脑海中。)
假设我有一个功能强大的主力:
[a b c d] = lotsOfComputation();
在某些用例中,我可能只需要它的一两个输出。在这些情况下,我会忽略带有~
. 是否可以从lostOfComputation
函数中检测到这一点?
(是的,我知道更优雅的解决方案是重构为单独的函数。我已经为直接用例做了这个,但问题仍然在我的脑海中。)
当然,试试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
。
直接回答你的问题,我不知道。
但是,如果您要求这样做以节省可能浪费的计算,您可以将您的函数拆分为子函数,但使用deal
.
例如,如果您一直想要a
and b
from lotsOfComputation
,您可以将您的函数重新制作为
[a b] = lotsOfComputation();
然后你可以有两个单独的计算c
和d
[c] = cComp();
[d] = dComp();
然后,您可以将原始函数编写为
[a b c d] = deal(lotsOfComputation(), cComp(), dComp());
如果您想忽略c
or的输出d
,可以在 deal 函数中将函数调用替换为 null 值,即
[a b ~ d] = deal(lotsOfComputation(), 0, dComp());
我知道这并不能直接回答这个问题,但它可能具有理论上的意义:)