【发布时间】:2013-10-30 04:54:14
【问题描述】:
假设我有一个函数foo,它可以在给定输入的情况下返回三个值:
function [a,b,c] = foo(input)
变量b和c的计算需要很长时间,所以有时我可能希望忽略它们在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 中心线程:How to detect when a output argument was marked unused with ~(tilde)?。