20

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

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

b变量的计算c需要很长时间,所以有时我可能希望忽略它们的计算foo。如果我想忽略这两个计算,我只需像这样调用函数:

output1 = foo(input);

然后包括nargoutfoo

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

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

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

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

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

4

1 回答 1

14

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

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

于 2013-10-21T16:16:18.163 回答