Cleanup tasks upon function completion
cleanupObj = onCleanup(cleanupFun) creates an object that, when destroyed, executes the function cleanupFun. MATLAB® implicitly clears all local variables at the termination of a function, whether by normal completion, or a forced exit, such as an error, or Ctrl+C.
If you reference or pass cleanupObj outside your function, then cleanupFun does not run when that function terminates. Instead, it runs whenever the MATLAB destroys the object.
Save the following code in action.m and type action in the Command Window.
function  = action() file = fullfile(matlabroot,'help','techdoc','matlab_env',... 'examples','collatz.m'); fid = fopen(file); finishup = onCleanup(@() fclose(fid)); disp('Execute code'); disp('then close file') end
Execute code then close file
Pass your own script to the onCleanup object so that it executes when MATLAB destroys the cleanup object.
Save the following code in cleanup.m.
cd(matlabroot); disp('You are now in the MATLAB root directory')
Save the following code in youraction.m and type youraction in the Command Window.
function  = youraction changeup = onCleanup(@() cleanup); disp('Execute Code'); end
Execute Code You are now in the MATLAB root directory
Clean-up task, specified as a function handle to an anonymous function. Your clean-up function should never rely on variables that are defined outside of the scope of that function.
You can declare any number of onCleanup objects in a program file. However, if the clean-up tasks depend on the order of execution, then you should define only one object that calls a script or function, containing the relevant clean-up commands.
You should use an anonymous function handle to call your clean-up task. This allows you to pass arguments to your clean-up function.
Example: @() fclose(file.m)
Example: @() user_script
Example: @() function(input)
Data Types: function_handle
If your program contains multiple cleanup objects, MATLAB does not guarantee the order that it destroys these objects.
If the order of your cleanup functions matters, define one onCleanup object for all the tasks.