如何确定函数调用的输出是否未使用?

st_*_*ory 19 matlab output

假设我有一个函数foo可以在给定输入的情况下返回三个值:

function [a,b,c] = foo(input)
Run Code Online (Sandbox Code Playgroud)

变量的计算bc需要很长的时间,所以有时我会希望忽略内的计算foo.如果我想忽略这两个计算,我只需调用这个函数:

output1 = foo(input);
Run Code Online (Sandbox Code Playgroud)

然后包括nargoutfoo:

if nargout == 1
    % Code to calculate "a" only
else
    % Code to calculate other variables
Run Code Online (Sandbox Code Playgroud)

如果我想计算最后一个输出,而不是第二个输出,则会出现问题.在那种情况下,我的函数调用将是:

[output1,~,output3] = foo(input);
Run Code Online (Sandbox Code Playgroud)

现在,如果我使用nargoutwithin foo来检查函数调用中有多少输出,它将始终返回,3因为tilde运算符(~)被认为是有效输出.因此,我不能nargout用来确定是否计算第二个输出b,在内foo.

有没有其他方法可以做到这一点?即,是否可以检查函数调用的哪些输出从函数本身中被丢弃?

hor*_*ler 13

评论者基本上是正确的; 除非MathWorks增加功能,否则这不是用户可以完全解决的问题.但是,我写了一个小函数,istilde一段时间后试图做你所要求的.它在许多情况下都有效,但实际上它有点破解而不是一个完全强大的解决方案.例如,我没有尝试让它直接用于从命令窗口调用的函数(这可能会添加一些工作).此外,它依赖于解析实际的M文件,这可能会有问题.请参阅随附的演示文件,了解其可能使用的方式istilde.

随意编辑我的代码以满足您的需求 - 由于健壮性问题,请不要在任何生产代码中使用它.欢迎任何改进.