How to save all global variables?

The save command only saves those Matlab variables which are visible in a workspace. It does not, however, cover the global variables which are reported by who('global') but have not been declared as globals in this workspace. Is there a way to save all global variables in a given Matlab session, even if their names are not known a priori?

 採用された回答

Jan
Jan 2013 年 2 月 14 日
編集済み: Jan 2013 年 2 月 21 日

1 投票

While I recommend not to use global variables, because they impede the debugging dramatically, there should be a solution to your problem.
When you want to save the variables, which are found by who('global'), it would be a simple idea to use globalVars = who('global') to get a list of these variables at first. Then the values might not be known inside a function. So, sigh, I have to suggest to one and only case, which I cannot solve without eval.
globalVars = who('global');
for iVar = 1:numel(globalVars)
eval(sprintf('global %s', globalVars{iVar})); % [EDITED]
end
This can overwrite local variables by accident, e.g. if "globalVars" is a global variable itself, this approach is buggy. Therefore I strongly recommend to choose a different strategy. The complexity caused by the automatic access of global variables cannot be managed reliably. And when there is the decision between a complicated and inherently buggy method and a clean and clear one, <not every sentence has to be finished>

4 件のコメント

Guido
Guido 2013 年 2 月 21 日
Thanks a lot. That helped quite a bit. There is just a small typo in the answer. The sigh line should read
eval(sprintf('global %s', globalVars{iVar}));
Jan
Jan 2013 年 2 月 21 日
Typo is fixed. But I have a bad conscience that I suggest a method containing the two evil commands EVAL and GLOBAL simultaneously. Hopefully nobody has seen this and reminds me, when I claim vainly, that there are always better ways then EVAL.
Sean Herbert
Sean Herbert 2016 年 2 月 25 日
another way, without a for loop:
globalVars = who('global')'; %notice the '
glob_str = sprintf('global %s',strjoin(globalVars));
%create them
eval(glob_str)
Stephen23
Stephen23 2016 年 2 月 25 日
編集済み: Stephen23 2016 年 2 月 25 日
These "solutions" should all be given the caveat "Only for entertainment purposes, NEVER use in serious code!"

サインインしてコメントする。

その他の回答 (1 件)

Tarun Luthra
Tarun Luthra 2017 年 12 月 19 日

0 投票

I am trying to do same thing. how do I save something inside a function such as a global variable out to workspace?

カテゴリ

ヘルプ センター および File ExchangeWorkspace Variables and MAT Files についてさらに検索

質問済み:

2013 年 2 月 14 日

コメント済み:

2017 年 12 月 20 日

Community Treasure Hunt

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

Start Hunting!

Translated by