是否可以检测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所问的。