【问题标题】:How to determine if an output of a function-call is unused?如何确定函数调用的输出是否未使用?
【发布时间】:2013-10-30 04:54:14
【问题描述】:

假设我有一个函数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

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

【问题讨论】:

  • 我真的看不出有什么简单的方法可以做到这一点,除了更改输出的顺序,或者有一个额外的输入,这将是计算第三个输出的标志。
  • 但是无论我如何重新排序我的输出,总有一种情况我想要“b”或“c”中的一个,并且如果我想要的一个在输出中出现在另一个之后为了我总是需要使用 ~ 运算符。标志输入似乎是唯一可行的方法......我希望在 Matlab 中内置一些更优雅的东西,但似乎没有这样的东西。
  • 只是转储想法。您可以在输入中指出您要计算哪个特定的。该函数的用法是: output1 = foo(input); [输出1,输出2,输出3] = foo(输入);[输出1,输出2-3] = foo(输入,'输出2');比如果 nargout ==2 检查标志

标签: matlab output


【解决方案1】:

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

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

【讨论】:

  • 我明白了,感谢上面评论中的链接和此信息。希望 MathWorks 将来会为类似的事情实现自己的功能!
  • 提供的链接已损坏。你能在这个答案中提供一个新的例子吗?
  • @thatrobotguy:很抱歉。您应该可以在此处访问文件:web.archive.org/web/20181008052208/http://biorobots.cwru.edu/…
猜你喜欢
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多