Clearing workspace variables while in a loop.

I have a while loop that contains a menu and some options for the user to input. One of them is to delete the workspace variables. However, whenever I clear the workspace it doesn't actually clear until the while loop stops (this occurs when they exit the program).
% case 3
% Clear data from memory
clearvars -except continueprogram %
% This clears the entire workspace, while allowing the
% program to continue running.
%
clc;
fprintf('The memory is cleared. Press a key to continue. \n')
pause;

3 件のコメント

Image Analyst
Image Analyst 2016 年 12 月 4 日
Why would you want to clear variables while a loop is running? This does not seem like a wise thing to do. Please provide justification for doing this.
Kyle Reagan
Kyle Reagan 2016 年 12 月 4 日
The loop is a data analysis tool for an uploaded file. It does things like plot histograms, linear regression, etc. One of the options on my menu is "Clear All" so that the user can clear all the file data, and then upload a new file without ever having to exit from the program.
Stephen23
Stephen23 2016 年 12 月 5 日
Clearing variables in a loop seems like an inefficient way to write code. Either the variables are re-allocated in each iteration (in which case clearing them serves no purpose) or new variables are created on each iteration (in which case the code is going to be buggy and slow no matter what).
Clearing variables is slow. Code of this complexity should be written as a function (and not a script), in which case it is totally irrelevant to the end user what variables exist in the function workspace.

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

回答 (1 件)

Walter Roberson
Walter Roberson 2016 年 12 月 4 日

0 投票

How can you tell that the workspace is not actually cleared?
If you are using the Workspace Browser then you need to know that (at least in recent versions) the Workspace Browser is not updated until you stop in the debugger or use keyboard() or control returns to the command line.

6 件のコメント

Kyle Reagan
Kyle Reagan 2016 年 12 月 4 日
I created a variable "a = 5" in the command window. Then I ran my loop which functions through a menu with various options. It has a pause feature after each action. So after I pressed "Clear All" on the menu ("clearvars -except continueprogram" is how it works), I did "5*a" in the command window and got 25.
Walter Roberson
Walter Roberson 2016 年 12 月 4 日
"clearvars removes all variables from the currently active workspace."
You are clearing the variables from the workspace of the callback function, which is not touching the variables of the base workspace.
Kyle Reagan
Kyle Reagan 2016 年 12 月 4 日
Whenever I use any type of clear the same thing happens. Do you know of a way to clear the base workspace while the loop continues?
Walter Roberson
Walter Roberson 2016 年 12 月 4 日
evalin('base', 'clear')
Kyle Reagan
Kyle Reagan 2016 年 12 月 4 日
This clears the "continueprogram = true" variable and causes the loop to stop running.
Walter Roberson
Walter Roberson 2016 年 12 月 5 日
evalin('base', 'clearvars -except continueprogram')

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

カテゴリ

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

質問済み:

2016 年 12 月 4 日

コメント済み:

2016 年 12 月 5 日

Community Treasure Hunt

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

Start Hunting!

Translated by