2.1.3 Recovering From Errors

Last-modified: 2025-03-22 (土) 21:52:58

12.1.3 エラーからの回復

tryOctave は、エラーから回復するためのいくつかの方法を提供します。/ catchブロック、 unwind_protect/unwind_protect_cleanupブロック、そして最後にonCleanupコマンドがあります。

このonCleanupコマンドは、通常の Octave 変数 (トリガー) を任意の関数 (アクション) に関連付けます。関数の戻り、エラー、または単に変数が削除されたために Octave 変数が存在しなくなった場合は、clear割り当てられた関数が実行されます。

この関数は、開いているファイル ハンドルを閉じたり、エラー メッセージを表示したり、グローバル変数を初期値に戻したりするなど、クリーンアップに必要な操作をすべて実行できます。最後の例は、Octave コードに非常に便利な慣用句です。たとえば、次のようになります。

function rand42
 old_state = rand ("state");
 restore_state = onCleanup (@() rand ("state", old_state));
 rand ("state", 42);
 ...
endfunction  # rand generator state restored by onCleanup

: obj = onCleanup (function)

破棄時に 指定された関数を実行する特別なオブジェクトを作成します。

オブジェクトが複数の変数 (またはセルまたは構造体の配列要素) にコピーされるか、関数から返される場合、関数はオブジェクトの最後のコピーがクリアされた後にのみ実行されます。

入力関数は関数へのハンドルです。ハンドルは、呼び出しにコマンドを直接配置するために匿名関数を指す場合がありますonCleanup 。

プログラミング ノート: 複数のローカルonCleanup変数が作成される場合、それらの呼び出し順序は指定されません。同様の機能については、「unwind_protect ステートメント」を参照してください。

octave:1> trigger = onCleanup (@() disp ('onCleanup was executed'));
octave:2> clear trigger
onCleanup was executed
octave:3