假设我有一个功能强大的主力:
[a b c d] = lotsOfComputation();
在某些用例中,我可能只需要其中一个或两个输出。在这些情况下,我忽略了~
的输出。是否可以在lostOfComputation
函数中检测到这一点?
(是的,我知道更优雅的解决方案是重构成单独的函数。我已经为即时用例做了这个,但问题仍然存在于我的脑海中。)
答案 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
我知道这并没有直接回答这个问题,但它可能具有理论上的兴趣:)