动机
用户编写完M文件后,还有最后一项任务要完成:关闭文件,删除临时文件等。Matlab提供了一个函数用作后面的清理,有点类似于面向对象语言中的析构函数,这就是onCleanup
用法
cleanupObj = onCleanup(cleanupFun)
其中cleanupFun是一个函数句柄(无输入值),当cleanupObj被清理时调用cleanupFun。因此cleanupObj必须有,如果没有就会有警告(一般来说,这个函数是在M结束后调用,但是这个也不尽然,只要是这个cleanupFun被清理了,就会调用cleanupFun。因为在M文件结束后,所有的临时变量会被清理,所以M文件结束后就会自动调用cleanupFun)
另外,在一个M文件中可以有多个onCleanup语句,当相应的变量被清理时,它们都会执行。由于变量清理的顺序不能确定,所以它们执行的顺序也不能确定。如果对执行顺序有要求,最好把它们都放到一个清理函数中吧。
例子1
function y = Add2(x)
y = x + 2;
c = onCleanup(@Hello);
function Hello
fprintf('Hello\n');
运行
d=Add(3);
输出
Hello
例子2
function [y,c] = Add2(x)
y = x + 2;
c = onCleanup(@Hello);
function Hello
fprintf('Hello\n');
“
运行
[d,c]=Add(3);
无输出
此时运行
clear c
输出
Hello
从例子2,大家明白了返回值得重要性了吧
技巧
清理函数(就是上面的那个cleanupFun)是一个无输入值得函数,如果大家想给清理函数传递参数,怎么办?
用匿名函数!
c = onCleanup( @() fclose('file.m'));
再比如
c = onCleanup(@()function(input))