Main Content

onCleanup

関数完了時のクリーンアップ作業

説明

cleanupObj = onCleanup(cleanupFun) は、破棄されるときに関数 cleanupFun を実行するオブジェクトを作成します。MATLAB® は正常終了であるか、エラーや Ctrl+C などの強制終了であるかに関係なく、関数が終了する際にすべてのローカル変数を暗黙的にクリアします。

関数外で cleanupObj を参照したり渡す場合には、その関数が終了しても cleanupFun は動作しません。代わりに、MATLAB がそのオブジェクトを破棄した際には必ず動作します。

すべて折りたたむ

action.m に以下のコードを保存し、コマンド ウィンドウで action と入力します。

function action
disp('Display Figure')
f = figure;
cleanup = onCleanup(@()myCleanupFun(f));
pause(1)
end

function myCleanupFun(f)
disp('Close Figure')
close(f)
end
Display Figure
Close Figure

自分で作成したスクリプトを onCleanup オブジェクトに渡して、MATLAB がクリーンアップ オブジェクトを破棄したときにスクリプトが実行されるようにします。

以下のコードを cleanup.m に保存します。

cd(tempdir)
disp('You are now in the temporary folder')

youraction.m に以下のコードを保存し、コマンド ウィンドウで youraction と入力します。

function youraction
cleanup = onCleanup(@cleanup);
disp('Execute Code')
end
Execute Code
You are now in the temporary folder

入力引数

すべて折りたたむ

クリーンアップ作業。関数ハンドルとして指定します。

プログラム ファイルでは、任意の数の onCleanup オブジェクトを宣言できます。しかし、クリーンアップ作業が実行順序に依存する場合には、適切なクリーンアップ コマンドを含むスクリプトや関数を呼び出すオブジェクトを 1 つだけ定義する必要があります。

クリーンアップ作業を呼び出す無名関数ハンドルを使用する必要があります。これにより、クリーンアップ関数に引数を渡すことができるようになります。

例: @()fclose('file.m')

例: @user_script

データ型: function_handle

ヒント

  • クリーンアップ中は入れ子関数の使用を避けるようにしてください。クリーンアップ関数が読み取る前に、MATLAB が入れ子関数に使用される変数を消去する可能性があります。

  • 自分のプログラム内に複数のクリーンアップ オブジェクトがある場合には、MATLAB ではこれらのオブジェクトを破棄する順序は保証されません。クリーンアップ関数の順序が問題となる場合には、すべての作業に対して onCleanup オブジェクトを 1 つだけ定義するようにします。

  • onCleanup オブジェクトを保存すると、MATLAB は警告を表示し、cleanupFun クリーンアップ作業を保存しません。

拡張機能

バージョン履歴

R2008a で導入