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

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

 Réponse acceptée

Bruno Luong
Bruno Luong le 1 Déc 2022
Modifié(e) : Bruno Luong le 1 Déc 2022
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 commentaires

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 le 1 Déc 2022
Yes it could be interpreted like that as well.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Argument Definitions dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by