为什么nargout返回-1?在这种情况下,如何得到正确数量的函数输出?



为什么在这种情况下nargout返回-1 ?

function test
fun=@(a)helper_fun(a,2);
[x,y]=fun(1);
x,  % 1
y,  % 2
nargout(fun),   % -1
end
function [c,d] = helper_fun(a,b)
c=a;
d=b;
end

是否有其他方法可以提取fun的正确输出变量数?

我希望在一个函数中强加语法检查,该函数将function_handle作为可选变量,这个工件迫使我要么改变函数的外观,要么不检查输出的数量。

从文档中:nargout返回一个负值来标记varargout在函数声明中的位置。例如,对于声明为

的函数
[y, varargout] = example_fun(x)

nargout将给出-2,这意味着第二个输出"实际上是varargout,它表示一个逗号分隔的列表,可以包含任意数量的输出。

对于匿名函数,nargout给出-1,因为它们可以返回任意数量的输出。也就是说,它们的签名等价于

varargout = example_fun(x)

匿名函数如何返回多个输出?如这里所示,通过将实际工作委托给另一个可以。例如:

>> f = @(x) find(x);
>> [a, b, c] = f([0 0 10; 20 0 0])
a =
2
1
b =
1
3
c =
20
10
>> nargout(f)
ans =
-1

比较
>> f = @find;
>> nargout(f)
ans =
3

结果现在是3,因为find被定义为(最多)3输出。

相关内容

  • 没有找到相关文章

最新更新