为什么 nargout return -1?在这种情况下如何获得正确数量的函数输出?
Why does nargout return -1? And how to get the correct number of function outputs in that case?
为什么在这种情况下 nargout
return -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
作为可选变量的函数中进行语法检查,这个工件迫使我要么改变函数的外观,要么不检查输出数量。
来自函数声明中的documentation: nargout
returns a negative value to mark the position of varargout
。例如,对于声明为
的函数
[y, varargout] = example_fun(x)
nargout
会给出-2
,意思是第二个“输出”实际上是varargout
,代表一个逗号分隔的列表,可以包含任意数量的输出。
nargout
为匿名函数提供 -1
因为它们可以 return 任意数量的输出。即他们的签名相当于
varargout = example_fun(x)
一个匿名函数如何return输出多个?如 here 所示,通过将实际工作委派给可以的另一个功能。例如:
>> 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
个输出。
为什么在这种情况下 nargout
return -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
作为可选变量的函数中进行语法检查,这个工件迫使我要么改变函数的外观,要么不检查输出数量。
来自函数声明中的documentation: nargout
returns a negative value to mark the position of varargout
。例如,对于声明为
[y, varargout] = example_fun(x)
nargout
会给出-2
,意思是第二个“输出”实际上是varargout
,代表一个逗号分隔的列表,可以包含任意数量的输出。
nargout
为匿名函数提供 -1
因为它们可以 return 任意数量的输出。即他们的签名相当于
varargout = example_fun(x)
一个匿名函数如何return输出多个?如 here 所示,通过将实际工作委派给可以的另一个功能。例如:
>> 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
个输出。