WithCleanup

WithCleanup[expr,cleanup]

expr を評価し,expr の評価中に,放棄,スロー等が生成された場合でも,結果を返す前に cleanup を実行する.

WithCleanup[init,expr,cleanup]

expr の評価の前に init を評価し,initcleanup の両方の放棄やスロー等をブロックする.

詳細

  • WithCleanup内の initcleanup では,次のタイプの操作がさまざまな方法でブロックされる.
  • 中断Abortおよびインタラクティブな中断
    制約条件TimeConstrainedMemoryConstrainedに基づいた終了
    コントロールの転送ThrowConfirmGotoBreakContinue
  • init の評価中に中断が起動されても,即座にそうなる訳ではなく,expr は評価されないが cleanup は評価される.
  • expr の評価中に中断が起動されると,その評価は中断されるが cleanup は実行される.
  • cleanup の評価中に中断が起動されても,cleanup の評価が終了するまで延期される.
  • TimeConstrained[... WithCleanup[...]... ]等の構築によって外部的に生成された制約は,WithCleanupの中では中断のように振る舞う
  • WithCleanup[...]の外部へのコントロールの転送が init あるいは expr の中で起こると,init あるいは expr の評価が終了され,cleanup が評価され,その後で転送が行われる.
  • コントロールの転送は,cleanup の評価中に起こった場合は延期されない.

例題

すべて開くすべて閉じる

  (2)

結果を返す前に x への割当てを削除する:

評価されているメインの式が中断されてもクリーンアップは行われる:

他のタイプの例外があっても同じことが起る:

スコープ  (2)

たとえ評価が中断されてもクリーンアップは実行される:

メインの式の評価中に外部制約に達してもクリーンアップは行われる:

WithCleanup内部の制約も特別な扱いは受けない:

アプリケーション  (1)

計算が中断された場合でも,作業ファイルが確実に適切に閉じられるようにする:

データは安全にディスクに書き込まれた:

同様に,計算がどのように終っても一時ファイルが確実に削除されるようにする:

ファイルは成功裏に削除された:

特性と関係  (3)

初期化またはクリーンアップの最中に中断されても,これらの評価の終了を妨げはしない:

メインの式の評価中に中断があると,評価が即座に終了される:

任意の引数での外部制御転送は,その引数の評価を即座に終了する:

転送が前の引数で開始された場合はクリーンアップの評価が行われるので注意のこと:

最後の引数では,制御転送がすぐに有効になる:

初期化とクリーンアップは,事実上,AbortProtectで包み込まれる:

考えられる問題  (1)

初期化とクリーンナップ内の計算はインタラクティブに中断したり時間制約を課したりできない:

本質的ではないすべてのコードをメインの式に移動する:

Wolfram Research (2020), WithCleanup, Wolfram言語関数, https://reference.wolfram.com/language/ref/WithCleanup.html.

テキスト

Wolfram Research (2020), WithCleanup, Wolfram言語関数, https://reference.wolfram.com/language/ref/WithCleanup.html.

CMS

Wolfram Language. 2020. "WithCleanup." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/WithCleanup.html.

APA

Wolfram Language. (2020). WithCleanup. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/WithCleanup.html

BibTeX

@misc{reference.wolfram_2024_withcleanup, author="Wolfram Research", title="{WithCleanup}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/WithCleanup.html}", note=[Accessed: 21-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_withcleanup, organization={Wolfram Research}, title={WithCleanup}, year={2020}, url={https://reference.wolfram.com/language/ref/WithCleanup.html}, note=[Accessed: 21-November-2024 ]}