假设我有一个函数foo
,可以在给定输入的情况下返回三个值:
function [a,b,c] = foo(input)
变量b
和c
的计算需要很长时间,因此有时我可能希望在foo
内忽略它们的计算。如果我想忽略这两个计算,我只需调用这个函数:
output1 = foo(input);
然后在nargout
中加入foo
:
if nargout == 1
% Code to calculate "a" only
else
% Code to calculate other variables
如果我想计算最后一个输出而不计算第二个输出,则会出现问题。在那种情况下,我的函数调用将是:
[output1,~,output3] = foo(input);
现在,如果我在nargout
中使用foo
来检查函数调用中有多少输出,那么它将始终返回3
,因为代字号运算符(~
)被认为是有效的输出。因此,我无法使用nargout
来确定是否在b
内计算第二个输出foo
。
还有其他办法吗?即,是否有可能检查函数调用中哪些函数调用的输出被丢弃?
答案 0 :(得分:13)
评论者基本上是正确的;除非MathWorks增加功能,否则这不是用户可以完全解决的问题。但是,我写了一个小函数,istilde
,一会儿试图做你所要求的。它在许多情况下都有效,但实际上它有点破解,并且不是一个完全强大的解决方案。例如,我没有尝试让它直接用于从命令窗口调用的函数(这可能会添加一些工作)。此外,它依赖于解析实际的M文件,这可能会有问题。请参阅随附的演示文件,了解如何使用istilde
。
随意编辑我的代码以满足您的需求 - 由于健壮性问题,请不要在任何生产代码中使用它。欢迎任何改进。