Why doesn't evalin('ca​ller','nar​gout') work?

2 次查看(过去 30 天)
Why doesn't the mynargout() function correctly return n=3? How can one programmatically evaluate nargout in the calling function?
[A,B,C]=Func();
function varargout=Func
varargout={1,2,3};
nargout
mynargout
end
function n=mynargout()
n=evalin('caller','nargout');
end

采纳的回答

Bruno Luong
Bruno Luong 2022-12-1
编辑:Bruno Luong 2022-12-1
Obviously it is NOT a normal "function", according to the doc of nargout
"nargout returns the number of function output arguments specified in the call to the currently executing function. Use this syntax in the body of a function only."
Therfore the nargout won't be propagae by evalin but returns the result corresponds number of the output to the last function in the stack meaning mynargout
[A,B,C]=Func();
a = 3
b = 1
function varargout=Func
varargout={1,2,3};
a=nargout
b=mynargout
end
function n=mynargout()
n=evalin('caller','nargout');
end
  2 个评论
Matt J
Matt J 2022-12-1
Use this syntax in the body of a function only.
I''m sure that's not what they meant when they wrote that. They mean you can't invoke nargout at the command line or in a script:
nargout
Error using nargout
You can only call nargin/nargout from within a MATLAB function.
Anyway, it looks like it's not possible.
Bruno Luong
Bruno Luong 2022-12-1
Yes it could be interpreted like that as well.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Argument Definitions 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by