Frederick
Frederick

Reputation: 1301

How to remove the variable "clear" in MATLAB

Let's say you are some new programmer and you do something like...

%...la da da
%...programming away
if such && such
    clear = 1;
else 
    clear = 0;
end 

or in some other way, you assign the variable clear a value.

Is there some way to "clear" clear?

clearvars doesn't work. Clicking the workspace variable and manually clicking delete does work, but I think it's cheating.

Upvotes: 18

Views: 1173

Answers (4)

StrongBad
StrongBad

Reputation: 879

A non intuitive way is

clear = rand(1000,500,700);
pack

This produces the following warning:

Warning: Variable 'clear' cannot be saved to a MAT-file whose version is older than 7.3. To save this variable, use the -v7.3 switch. Skipping...

It also suffers from the same issue that you can assign pack to be a variable.

Upvotes: 1

Eitan T
Eitan T

Reputation: 32930

Any name, even builtin and feval can be overriden. In such case, you can use function handles instead to force MALTAB into interpreting a statement as a function call:

clear = str2func('clear');
clear('clear')

Obviously, str2func can also be overrriden! :) however, there exists a similar solution (inspired by Loren's article), which is creating a separate m-file that does the same thing:

function clearclear()
    assignin('caller', 'clear', @clear);

Calling this function in the main workspace should allow you to do clear('clear') safely.

The second solution takes advantage of the fact that the m-file doesn't "see" the variable clear in the main workspace, and therefore can access the actual handle of the clear function properly.

Upvotes: 8

Dennis Jaheruddin
Dennis Jaheruddin

Reputation: 21563

Interesting problem! I found it surprisingly hard to find an ways to do this programatically (besides the one suggested by @TryHard)

Here is the I have come up with though it is a bit more powerfull than clear:

!matlab &
exit

Note that if you want to type this in the command line at once, you need to use a shift+enter in between.

Upvotes: 0

Buck Thorn
Buck Thorn

Reputation: 5073

This will do it:

builtin('clear','clear')

Note: Keep in mind to avoid such operations to keep code clarity. Only do overwrite when it is the exact action you want to take place. Otherwise it may cause future bugs if you forgot (or if another person uses your code and didn't realize it) that you have the clear (or any other) function overwritten. You could easily name this variable as doClear for example.

Upvotes: 27

Related Questions