W = evalin('caller','who global') returns an error

2 vues (au cours des 30 derniers jours)
Leo Simon
Leo Simon le 10 Juin 2020
Commenté : Walter Roberson le 10 Juin 2020
The command
evalin('caller','who global')
correctly returns the global variables in the caller workspace, but
W = evalin('caller','who global')
returns the error message
Error: illegal use of the reserved keyword global
Yet the syntax of the line that throws the error is consistent with the prescribed use of evalin. Is this a bug? What's the workaround? Thanks
  3 commentaires
Leo Simon
Leo Simon le 10 Juin 2020
Thanks Steven, here's an mwe, illustrating how I use the evalin syntax. I have decades of globals scattered all over the place, and backward compatibility means that I need a solution (Walter's works perfectly well). But if you have suggestions about alternatives to my use of evalin, I'd be most interested in hearing them.
function parent
global delta
child('gamma',5,'delta',6);
function child(varargin);
W = evalin('caller','who("global")');
for ii=1:2:numel(varargin);
Variable = varargin{ii};
if ~isempty(strmatch(W,Variable));
disp([ Variable ' is a global variable but you passed it as an argument to varargin; don''t do that']);
keyboard;
end;
end
Walter Roberson
Walter Roberson le 10 Juin 2020
I would disagree on that checking. You want to encourage migration to passing variables as parameters, to reduce the reliance on global variables.

Connectez-vous pour commenter.

Réponse acceptée

Walter Roberson
Walter Roberson le 10 Juin 2020
W = evalin('caller','who("global")')

Plus de réponses (0)

Catégories

En savoir plus sur Workspace Variables and MAT-Files dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by