首页 文章

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

提问于
浏览
18

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

function [a,b,c] = foo(input)

变量 bc 的计算需要很长时间,因此有时我可能希望在 foo 中忽略它们的计算 . 如果我想忽略这两个计算,我只需调用这个函数:

output1 = foo(input);

然后在 foo 中包含 nargout

if nargout == 1
    % Code to calculate "a" only
else
    % Code to calculate other variables

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

[output1,~,output3] = foo(input);

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

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

1 回答

  • 13

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

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

相关问题