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

2 Ansichten (letzte 30 Tage)
Matt J
Matt J am 1 Dez. 2022
Kommentiert: Bruno Luong am 1 Dez. 2022
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

Akzeptierte Antwort

Bruno Luong
Bruno Luong am 1 Dez. 2022
Bearbeitet: Bruno Luong am 1 Dez. 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 Kommentare
Matt J
Matt J am 1 Dez. 2022
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 am 1 Dez. 2022
Yes it could be interpreted like that as well.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Argument Definitions finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by