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

Arg*_*yll 4 matlab function-handle

为什么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
Run Code Online (Sandbox Code Playgroud)

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

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

Lui*_*ndo 5

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

[y, varargout] = example_fun(x)
Run Code Online (Sandbox Code Playgroud)

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

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

varargout = example_fun(x)
Run Code Online (Sandbox Code Playgroud)

匿名函数如何返回多个输出?如此处所示,通过将实际工作委托给另一个可以做到的功能。例如:

>> 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
Run Code Online (Sandbox Code Playgroud)

将此与

>> f = @find;
>> nargout(f)
ans =
     3
Run Code Online (Sandbox Code Playgroud)

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