Why does nargout return -1 in this case?
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
Is there an alternative to extract the correct number of output variables of fun?
I was hoping to impose a syntax check in a function that takes function_handle as an optional variable and this artifact forced me to either change how my function must look or not check number of outputs.
From the documentation: nargout returns a negative value to mark the position of varargout in the function declaration. As an example, for a function declared as
[y, varargout] = example_fun(x)
nargout will give -2, meaning that the second "output" is actually varargout, which represents a comma-separated list that can contain any number of outputs.
nargout gives -1 for anonymous functions because they can return any number of outputs. That is, their signature is equivalent to
varargout = example_fun(x)
How can an anonymous function return more than one output? As indicated here, by delegating the actual work to another function that can. For example:
>> 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
Compare this to
>> f = @find;
>> nargout(f)
ans =
3
The result is now 3 because find is defined with (at most) 3 outputs.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With